2009-10-01 4 views
10

J'essaye de démarrer la base de données H2 en en mode serveur (je veux que le processus soit différent) via Spring. Actuellement, je suis en utilisant java Runnable.exec pour démarrer la base de données de h2 (en utilisant la commande suivante: « java -cp h2.jar org.h2.tools.Server »)Démarrer la base de données H2 en mode serveur via Spring

Je sais qu'il ya un moyen de Faites-le via le printemps. J'ai essayé d'ajouter ce qui suit à la configuration du ressort, mais il ne fonctionnait pas (il n'a pas commencé à la base de données de 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> 

Je vous serais reconnaissant toute aide/idées

+0

Un message d'erreur a-t-il été imprimé? –

Répondre

11

-vous arrive d'avoir:

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

dans vos fichiers de configuration de printemps?

+0

J'ai changé la configuration des beans à lazy-init = "false". Cela fonctionne maintenant. Merci! – Lin

+0

+1 bonne prise ... – skaffman

1

Êtes-vous sûr que le createTcpServer méthode dans la classe Server est vraiment appelé? Avez-vous essayé d'établir un point d'arrêt là?

H2 tutorial affirme que cette façon vous pouvez créer et démarrer le serveur: programme

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

Votre définition de printemps semble mimer la même initialisation. Mais vous pouvez toujours essayer de le faire manuellement - peut-être que c'est une erreur dans la configuration de Spring.

EDIT:

J'ai essayé votre configuration et cela fonctionne pour moi. Qu'est-ce qui vous fait penser que le serveur n'est pas démarré? Il n'imprime rien sur stdout, cependant le processus écoute sur le port 8043. Donc ça semble plutôt bien.

3

Récemment, j'ai dû faire la même configuration pour faire un test unitaire et vérifier les données, cela fonctionne pour moi (printemps 3.1.4). Ensuite, il vous suffit de vous connecter avec jdbc: h2: tcp: // localhost: 8043/mem: test et assurez-vous de mettre un certain temps (true) {} à la fin de votre 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> 
Questions connexes