2012-02-16 2 views
20

Как запустить базу данных H2 в режиме сервера. Мне нужно, чтобы запустить его из моей application.I попытался следующий код:Как запустить базу данных 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) 

Спасибо,

+3

http://www.h2database.com/html/tutorial.html#using_server –

+1

Это не работает для меня –

+1

OK ... Я имею в виду - пожалуйста, уточните , Почему это не работает? Чего вы хотите достичь? что ты уже испробовал? –

ответ

24

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

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

Я думаю, вы немного смущены в разных режимах подключения. Я предлагаю прочитать the documentation about the connection modes, чтобы убедиться, что вы это поняли.

+1

Сообщение об исключении создает впечатление, что запуск базы данных в «встроенном режиме» позволяет использовать только одно соединение, а при вводе в «режим сервера» разрешено несколько подключений. Разве это не так? – bvdb

+0

Нет, это не тот случай. См. Документацию. –

+2

@ Thomas - Я просмотрел ряд сообщений, и я продолжаю видеть, как вы говорите, чтобы посмотреть документацию. Пожалуйста, не делай этого. Документация, особенно вокруг startTcpServer, в лучшем случае разрежена. Сервер запускается, и его можно отключить удаленно, но он отказывается от всех подключений. – Steve11235

11

Для запуска 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-клиент (http://squirrel-sql.sourceforge.net/) для подключения к базе данных вам H2 и посмотреть на столах.

  1. Создать новое соединение.
  2. Выберите H2 в меню драйвера ниспадающего
  3. Установить адрес в папку целевую папку h2 проекта (JDBC: h2: C: \ Проекты \ рабочее пространство \ TestProject \ мишени/h2/пс; AUTO_SERVER = истина)
  4. Введите имя пользователя ("са")
  5. Введите пароль ("")
+0

org.h2.jdbc.JdbcSQLException: путь к файлу, который неявно относится к текущему рабочему каталогу, не допускается в URL-адрес базы данных «jdbc: h2: target/h2/ps; AUTO_SERVER = TRUE». Используйте абсолютный путь, ~/name, ./name или baseDir. [90011-196] –

15

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

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

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

Web Console server running at http://A.B.C.D:8082 (others can connect) Failed to start a browser to open the URL http://A.B.C.D:8082 : Browser detection failed and system property h2.browser not set 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)

открыть браузер, чтобы иметь графический интерфейс пользователя, ADMIN

+0

При использовании этого подхода, как вы увеличиваете максимальное количество разрешенных соединений? –

+0

Этот работал для меня. Особенно обратите внимание на порт TCP по умолчанию: 9092 (можно настроить с помощью -tcpPort)! – Lars

2

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

+0

Спасибо, отлично работает. –

Смежные вопросы