Как запустить базу данных H2 в режиме сервера? - PullRequest
27 голосов
/ 16 февраля 2012

Как запустить базу данных H2 в режиме сервера.Мне нужно запустить его из моего приложения. Я попробовал следующий код:

server = Server.createTcpServer().start();

Вот свойства для подключения:

javabase.jdbc.url = jdbc:h2:tcp://localhost:9092/nio:~/source/db/database/db;AUTO_SERVER=TRUE
javabase.jdbc.driver = org.h2.Driver
javabase.jdbc.username = sa
javabase.jdbc.password =

При запуске программы я получил следующееошибка:

client.db.exception.DAOException: org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-164]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:439)
    at org.h2.store.FileLock.lockFile(FileLock.java:336)
    at org.h2.store.FileLock.lock(FileLock.java:128)
    at org.h2.engine.Database.open(Database.java:542)
    at org.h2.engine.Database.openDatabase(Database.java:222)
    at org.h2.engine.Database.<init>(Database.java:217)
    at org.h2.engine.Engine.openSession(Engine.java:56)
    at org.h2.engine.Engine.openSession(Engine.java:159)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
    at org.h2.engine.Engine.createSession(Engine.java:121)
    at org.h2.server.TcpServerThread.run(TcpServerThread.java:133)
    at java.lang.Thread.run(Thread.java:680)

Спасибо,

Ответы [ 5 ]

26 голосов
/ 17 февраля 2012

Как говорится в сообщении об исключении: «База данных уже используется».Вам необходимо закрыть все другие соединения, чтобы убедиться, что база данных не открыта в другом процессе одновременно.

Кстати, не используйте AUTO_SERVER = TRUE и серверрежим одновременно.См. Документацию для автоматического смешанного режима .Используйте любой из них.

Полагаю, вы немного озадачены различными режимами подключения.Предлагаю прочитать документацию о режимах подключения , чтобы убедиться, что вы понимаете это.

18 голосов
/ 10 февраля 2014

Из командной строки

java -jar h2-1.3.160.jar -webAllowOthers -tcpAllowOthers

это запустит базу данных h2 в режиме сервера:

Web Console server running at http://A.B.C.D:8082 (others can connect)
TCP server running at tcp://A.B.C.D:9092 (others can connect)
PG server running at pg://A.B.C.D:5435 (only local connections)

откроет браузер, чтобы иметь GUI администратора

12 голосов
/ 26 сентября 2013

Вы можете использовать следующий код для запуска H2 в режиме сервера.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:target/h2/ps;AUTO_SERVER=TRUE" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>

Вы можете использовать SQL-клиент SQuirrel (http://squirrel -sql.sourceforge.net / ) для подключения к базе данных H2 и просмотра таблиц.

  1. Создать новое соединение.
  2. Выберите H2 в раскрывающемся меню драйвера
  3. Установить URL-адрес для папки h2 целевой папки вашего проекта (jdbc: h2: C: \ projects \ workspace \ TestProject \ target / h2 / ps; AUTO_SERVER = true)
  4. Введите имя пользователя ("sa")
  5. Введите пароль ("")
2 голосов
/ 05 мая 2017

Закройте все приложения, использующие H2 (веб-консоль и т. Д.) Затем добавьте AUTO_SERVER = TRUE в конец местоположения в консоли h2, а также в java-программе (что вы уже сделали)

0 голосов
/ 22 ноября 2018

Я получаю эту ошибку при попытке запустить H2.
См. Также http://h2database.com/javadoc/org/h2/tools/Server.html

Исключение в потоке "main" org.h2.jdbc.JdbcSQLException: функция неподдерживается: "- ~ webAllowOthers" [50100-197]

Поэтому я выполнил следующие действия:

  1. make dir mkdir h2db В этом каталоге будут ваши db-файлы.
  2. Нажмите эту команду: java -cp bin/h2-1.4.197.jar org.h2.tools.Server -web -webAllowOthers -tcp -tcpAllowOthers -baseDir /home/manoj/dev/h2/h2db_6.0
    эта команда запустится h2
  3. Если вы хотите запустить h2 в бэкэнде, откройте vi h2.sh и вставьте эту команду в это: nohup java -cp bin/h2-1.4.197.jar org.h2.tools.Server -web -webAllowOthers -tcp -tcpAllowOthers -baseDir /home/manoj/dev/h2/h2db_6.0/ &
  4. Теперь запустите ./bin.h2.sh.
...