【问题标题】:Start the H2 database in server mode via Spring通过 Spring 以服务器模式启动 H2 数据库
【发布时间】:2010-12-02 22:48:31
【问题描述】:

我正在尝试通过 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>

我将不胜感激任何帮助/想法

【问题讨论】:

    标签: spring h2 server-mode


    【解决方案1】:

    你碰巧有:

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

    在您的 Spring 配置文件中?

    【讨论】:

    • 我将 beans 配置更改为 lazy-init="false"。现在可以了。谢谢你!
    【解决方案2】:

    最近我不得不做相同的配置来进行单元测试和检查数据,这对我有用(Spring 3.1.4)。然后你只需要连接 jdbc:h2:tcp://localhost:8043/mem:test 并确保在测试结束时放一个 while(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>
    

    【讨论】:

      【解决方案3】:

      你确定Server 类中的createTcpServer 方法真的被调用了吗?你试过在那里设置断点吗?

      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 配置中的一些错误。

      编辑:

      我已经尝试了您的配置,它对我有用。是什么让您认为服务器未启动?它不会在标准输出上打印出任何内容,但是该进程会在 8043 端口上进行侦听。所以看起来还不错。

      【讨论】:

        猜你喜欢
        • 2019-09-13
        • 2011-01-13
        • 2016-07-18
        • 1970-01-01
        • 2014-12-30
        • 2013-01-24
        • 2015-05-24
        • 2015-03-06
        • 2018-07-12
        相关资源
        最近更新 更多