복붙노트

[SPRING] Spring을 통해 서버 모드에서 H2 데이터베이스 시작하기

SPRING

Spring을 통해 서버 모드에서 H2 데이터베이스 시작하기

나는 스프링을 통해 서버 모드 (다른 프로세스에서 실행되기를 원함)로 H2 데이터베이스를 시작하려고한다. 현재 java Runnable.exec을 사용하여 h2 데이터베이스를 시작합니다 ( "java -cp h2.jar org.h2.tools.Server"명령 사용).

나는 봄을 통해 그것을 할 수있는 방법이 있다는 것을 알고있다. 스프링 구성에 다음을 추가하려고 시도했지만 작동하지 않았습니다 (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>

어떤 도움이나 아이디어라도 고맙겠습니다.

해결법

  1. ==============================

    1.당신은 다음과 같은 일을합니까?

    당신은 다음과 같은 일을합니까?

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

    Spring 설정 파일에?

  2. ==============================

    2.최근에 유닛 테스트와 체크 데이터를 만들기 위해 같은 설정을해야만했습니다. 이것이 저에게 효과적입니다 (Spring 3.1.4). 그런 다음 jdbc : h2 : tcp : // localhost : 8043 / mem : test에 연결하고 테스트가 끝나면 잠시 (true) {}를 입력해야합니다.

    최근에 유닛 테스트와 체크 데이터를 만들기 위해 같은 설정을해야만했습니다. 이것이 저에게 효과적입니다 (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>
    
  3. ==============================

    3.Server 클래스의 createTcpServer 메소드가 실제로 호출 되었습니까? 거기에 브레이크 포인트를 설치하려 했습니까?

    Server 클래스의 createTcpServer 메소드가 실제로 호출 되었습니까? 거기에 브레이크 포인트를 설치하려 했습니까?

    H2 자습서에서는 프로그래밍 방식으로 서버를 만들고 시작하는 방법을 다음과 같이 설명합니다.

    import org.h2.tools.Server;
    ...
    // start the TCP Server
    Server server = Server.createTcpServer(args).start();
    ...
    // stop the TCP Server
    server.stop();
    

    당신의 Spring 정의는 같은 초기화를 모방하는 것처럼 보인다. 하지만 수동으로 시도해 볼 수도 있습니다. 아마도 스프링 구성에서 약간의 오류 일 수 있습니다.

    편집하다:

    귀하의 구성을 시도하고 그것은 나를 위해 작동합니다. 왜 서버가 시작되지 않았다고 생각합니까? 프로세스는 8043 포트에서 청취하지만 stdout에는 아무 것도 출력하지 않습니다. 그래서 꽤 괜찮은 것 같습니다.

  4. from https://stackoverflow.com/questions/1503079/start-the-h2-database-in-server-mode-via-spring by cc-by-sa and MIT license