Source de données H2 intégrée du printemps et DB proche à la sortie
pour les tests unitaires (appelez-les tests d'intégration si vous voulez) j'ai configuré une base de données intégrée dans ma configuration de printemps comme suit:
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:schema_h2.sql" />
</jdbc:embedded-database>
maintenant, quand on exécute les tests à partir de la ligne de commande, ils fonctionnent bien, mais j'ai quelques erreurs à la fin (inoffensives, mais irritantes):
WARN 2013-03-25 12:20:22,656 [Thread-9] o.s.j.d.e.H2EmbeddedDatabaseConfigurer 'Could not shutdown embedded database'
org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-170]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2-1.3.170.jar:1.3.170]
...
at org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean.destroy(EmbeddedDatabaseFactoryBean.java:65) [spring-jdbc-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:238) [spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
maintenant, le Conseil contenu dans l'exception est bon en général, mais comment puis-je ajouter cet attribut à la source de données intégrée? Dois-je développer, configurer à la main pour ainsi dire, à ajouter ‘avancé’ fonctionnalités?
2 réponses
spécifier le paramètre dans l'url jdbc jdbc:h2:~/test;DB_CLOSE_ON_EXIT=FALSE
aussi pour la base de données de test en mémoire je vous suggère d'ajouter DB_CLOSE_DELAY=-1
, comme ceci:
jdbc:h2:mem:alm;MODE=Oracle;DB_CLOSE_DELAY=-1
pour ajouter l'url de connexion JDBC à embedded-dababase
modifier:
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:test;MODE=Oracle;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
<jdbc:script location="classpath:schema_h2.sql" />
</jdbc:initialize-database>
j'ai eu le même problème que celui de Michael Piefel, et j'ai essayé de mettre en œuvre la solution que Michail Nikolaev a expliquée.
mais je n'ai pas fonctionné, en quelque sorte spring-batch, alors, où sont les métadonnées JOB_* tables sont.
Donc, comme la version de spring-jdbc
utilisé par mon application est 3.0.5 et en augmentant le spring-framework
on entre en conflit avec dwr
(je l'utilise dans mon application) c'est un geo
localisation basée sur le printemps,dwr
et gmaps api
.
J'ai téléchargé le spring-jdbc 4.0.3
relâchez et obtenez de lui le H2EmbeddedDatabaseConfigurer.class
qui a DB_CLOSE_ON_EXIT=FALSE
par défaut et remplacer par lui celui sur le spring-jdbc 3.0.5
Relase et déployez-il dans la guerre de fichier et ça marche, l'arrêt de l' VM
n'a pas provoqué la fermeture de la base de données en mémoire.
J'espère que cette solution inhabituelle aidera si d'autres personnes comme moi ne seraient pas en mesure de mettre en œuvre l'autre solution.