我正试图通过Spring以服务器模式(我希望它在不同的进程中运行)启动H2数据库。 目前我正在使用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>
我将不胜感激任何帮助/想法
答案 0 :(得分:11)
你碰巧有:
<beans default-lazy-init="true" ...
在Spring配置文件中?
答案 1 :(得分:3)
最近我不得不做相同的配置来进行单元测试和检查数据,这对我有用(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>
答案 2 :(得分:1)
您确定createTcpServer
类中的Server
方法是否真的被调用了?你试过在那里设置一个断点吗?
H2 tutorial声称您可以通过编程方式创建和启动服务器:
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端口进行侦听。所以看起来还不错。