Запустите базу данных H2 в режиме сервера через Spring

Я пытаюсь запустить базу данных H2 в режим сервера (Я хочу, чтобы он работал в другом процессе) через Spring. В настоящее время я использую java Runnable.exec для запуска базы данных h2 (с помощью команды:"java-cp h2.jar org.Н2.инструменты.Сервер")

Я знаю, что есть способ сделать это через Весна. Я попытался добавить следующее В конфигурацию 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?


недавно мне пришлось сделать ту же конфигурацию, чтобы сделать модульный тест и проверить данные, это работает для меня (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.

EDIT:

Я пробовал вашу конфигурацию и это работает на меня. Что заставляет вас думать, что сервер не запущен? Он ничего не распечатывает на stdout, однако процесс прослушивает порт 8043. Так это, кажется, довольно хорошо.