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?

29
demandé sur Michael Piefel 2013-03-25 15:24:43

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>
53
répondu Michail Nikolaev 2017-09-14 06:40:14

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.

1
répondu Youssef Kesbaoui 2016-05-27 11:13:17