2009-10-01 13 views
10

Sto tentando di avviare il database H2 nella modalità server (desidero che venga eseguito in un processo diverso) tramite Spring. Attualmente sto usando Java Runnable.exec per avviare il database h2 (usando il comando: "java -cp h2.jar org.h2.tools.Server")Avviare il database H2 in modalità server tramite Spring

So che c'è un modo per fallo via Spring. Ho provato ad aggiungere il seguente alla configurazione primavera, ma non ha funzionato (non è stato avviato il database 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> 

Gradirei qualsiasi aiuto/idee

+0

Qualche messaggio di errore stampato? –

risposta

11

Ti capita di avere:

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

nei file di configurazione di primavera?

+0

Ho cambiato la configurazione dei bean in lazy-init = "false". Funziona ora. Grazie! – Lin

+0

+1 buona presa ... – skaffman

1

Sei sicuro che il Il metodo createTcpServer nella classe Server è davvero chiamato? Hai provato a creare un breakpoint lì?

H2 tutorial sostiene che questo modo è possibile creare e avviare il server a livello di codice:

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

tua definizione primavera sembra mimare lo stesso di inizializzazione. Ma puoi sempre provare a farlo manualmente - forse è un errore nella configurazione di Spring.

EDIT:

ho provato la configurazione e funziona per me. Cosa ti fa pensare che il server non sia avviato? Non stampa nulla su stdout, tuttavia il processo è in ascolto sulla porta 8043. Quindi sembra abbastanza OK.

3

Recentemente ho dovuto fare la stessa configurazione per fare test di unità e controllare i dati, questo funziona per me (Spring 3.1.4). Quindi devi solo connetterti con jdbc: h2: tcp: // localhost: 8043/mem: test e assicurati di mettere un while (true) {} alla fine del test.

<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> 
Problemi correlati