12

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>

ヘルプ/アイデアをいただければ幸いです

4

3 に答える 3

11

あなたはたまたま持っていますか:

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

あなたのSpring構成ファイルで?

于 2009-10-01T10:28:10.417 に答える
3

最近、単体テストを作成してデータをチェックするために同じ構成を行う必要がありましたが、これは私にとってはうまくいきます(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>
于 2014-02-13T18:54:39.517 に答える
1

クラスの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 ポートでリッスンします。それで、それはかなりOKのようです。

于 2009-10-01T10:22:33.440 に答える