-->

开始通过Spring在服务器模式下的H2数据库(Start the H2 database in s

2019-07-20 09:06发布

我想通过春季开始在服务器模式的H2数据库(我希望它在不同的进程中运行)。 目前我使用的Java Runnable.exec启动H2数据库(使用命令:“java命令h2.jar org.h2.tools.Server”)

我知道,有一种方法通过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>

我希望得到任何帮助/想法

Answer 1:

你碰巧有:

<beans default-lazy-init="true" ...

在Spring配置文件?



Answer 2:

最近,我不得不做相同的配置,使单元测试和校验数据,这对我的作品(春季3.1.4)。 然后,你就必须使用JDBC连接:H2:TCP://本地主机:8043 / MEM:测试并确保投入,而(真){}在测试结束。

<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>


Answer 3:

你确定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配置一定的过错。

编辑:

我试过你的配置,它为我工作。 是什么让你觉得服务器未启动? 它不会打印出任何东西在stdout,但是进程监听在8043端口。 因此,它似乎相当确定。



文章来源: Start the H2 database in server mode via Spring