Запустите базу данных H2 в режиме сервера через Spring
Я пытаюсь запустить базу данных H2 в режиме сервера (я хочу, чтобы она запускалась в другом процессе) через Spring. В настоящее время я использую java Runnable.exec для запуска базы данных h2 (с помощью команды: "java -cp h2.jar org.h2.tools.Server")
Я знаю, что есть способ сделать это через Spring. Я попытался добавить следующее в конфигурацию Spring, но это не сработало (не запустило базу данных H2):
<bean id="org.h2.tools.Server" class="org.h2.tools.Server"
factory-method="createTcpServer" init-method="start" destroy-method="stop">
<constructor-arg value="-tcp,-tcpAllowOthers,true,-tcpPort,8043" />
</bean>
<bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server"
factory-method="createWebServer" init-method="start">
<constructor-arg value="-web,-webAllowOthers,true,-webPort,8082" />
</bean>
Буду признателен за любую помощь / идеи
3 ответа
Есть ли у вас:
<beans default-lazy-init="true" ...
в ваших весенних конфигурационных файлах?
Недавно мне пришлось выполнить ту же конфигурацию, чтобы выполнить модульное тестирование и проверить данные, у меня это работает (Spring 3.1.4). Тогда вам просто нужно соединиться с помощью jdbc:h2:tcp://localhost:8043/mem:test и убедиться, что в конце теста ставится некоторое время (true){}.
<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:mem:;TRACE_LEVEL_FIlE=4"/-->
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop">
<constructor-arg>
<array>
<value>-tcp</value>
<value>-tcpAllowOthers</value>
<value>-tcpPort</value>
<value>8043</value>
</array>
</constructor-arg>
</bean>
Вы уверены, что createTcpServer
метод в Server
класс действительно называется? Вы пытались установить точку останова там?
В руководстве H2 утверждается, что вы можете программно создать и запустить сервер:
import org.h2.tools.Server;
...
// start the TCP Server
Server server = Server.createTcpServer(args).start();
...
// stop the TCP Server
server.stop();
Кажется, что ваше определение Spring имитирует ту же инициализацию. Но вы всегда можете попробовать сделать это вручную - возможно, это какая-то ошибка в конфигурации Spring.
РЕДАКТИРОВАТЬ:
Я попробовал вашу конфигурацию, и она работает для меня. Что заставляет вас думать, что сервер не запущен? Он ничего не выводит на стандартный вывод, однако процесс прослушивает порт 8043. Так что, похоже, все в порядке.