2009-10-01 16 views
10

Estoy tratando de iniciar la base de datos H2 en el modo de servidor (quiero que se ejecute en un proceso diferente) a través de Spring. Actualmente estoy usando java Runnable.exec para iniciar la base de datos de H2 (mediante el comando: "java -cp h2.jar org.h2.tools.Server")Inicie la base de datos H2 en modo servidor a través de Spring

Sé que hay una manera de hazlo a través de Spring. He intentado añadir lo siguiente a la configuración de la primavera, pero no funcionó (que no se ha iniciado la base de datos 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> 

Agradecería cualquier ayuda/ideas

+0

¿Se ha impreso algún mensaje de error? –

Respuesta

11

No le sucede que tiene:

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

en los archivos de configuración de la primavera?

+0

Cambié la configuración de beans a lazy-init = "false". Funciona ahora. ¡Gracias! – Lin

+0

+1 buena captura ... – skaffman

1

¿Seguro la createTcpServer método en la clase Server realmente se llama? ¿Has intentado establecer un punto de interrupción allí?

H2 tutorial afirma que esto cómo se puede crear e iniciar el servidor mediante programación:

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

Su definición primavera parece imitar la misma inicialización. Pero siempre puedes intentar hacerlo manualmente, quizás sea un error en la configuración de Spring.

EDIT:

he probado la configuración y funciona para mí. ¿Qué te hace pensar que el servidor no está iniciado? No imprime nada en stdout, sin embargo, el proceso se escucha en el puerto 8043. Entonces parece bastante bien.

3

Recientemente tuve que hacer la misma configuración para hacer pruebas unitarias y verificar datos, esto funciona para mí (Spring 3.1.4). Luego solo tienes que conectarte con jdbc: h2: tcp: // localhost: 8043/mem: test y asegúrate de poner while (true) {} al final de tu prueba.

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