2013-03-25 10 views
25

Dla testów jednostkowych (nazywamy je testy integracyjne, jeśli chcesz) Mam skonfigurowany wbudowanej bazy danych w moim wiosennym config tak:sprężyny i DB_CLOSE_ON_EXIT

<jdbc:embedded-database id="dataSource" type="H2"> 
    <jdbc:script location="classpath:schema_h2.sql" /> 
</jdbc:embedded-database> 

Teraz, gdy uruchomione testy z poleceniem linia, pracują dobrze, ale mam pewne błędy na końcu (nieszkodliwe, ale irytujące):

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] 

teraz wskazówka zawarta w wyjątku jest w porządku, w ogóle, ale w jaki sposób dodać atrybut do wbudowany źródło danych? Czy muszę go rozbudować, skonfigurować ręcznie, by tak powiedzieć, aby dodać takie zaawansowane funkcje "zaawansowane"?

Odpowiedz

49

określić parametr w JDBC URL jdbc:h2:~/test;DB_CLOSE_ON_EXIT=FALSE

Także w pamięci testowej bazy danych Proponuję dodać DB_CLOSE_DELAY=-1 coś takiego:

jdbc:h2:mem:alm;MODE=Oracle;DB_CLOSE_DELAY=-1 

Aby dodać połączenia JDBC URL do embedded-dababase go zmienić na:

<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> 
+0

Znalazłem to w dokumentacji H2. Nie powiedziałeś, jak dodać to do ''. –

+0

sprawdź zaktualizowaną odpowiedź –

+1

Awesome, co bym zrobił bez SO? – jeremyjjbrown

0

Miałem ten sam problem co Michael Piefel i próbowałem wdrożyć rozwiązanie, które Michail Nikolaev ex obrzeżony. ale nie działałem, jakoś tak jak w wiosennym pakowaniu, gdzie są tabele JOB_ * metadanych. Tak, jak wersja spring-jdbc używany przez mojego wniosku jest 3.0.5 i zwiększenie jedną spring-framework wchodzi w konflikt z dwr (używam go w moim app) to geo lokalizacja oparty na wiosnę, dwr i gmaps api. Pobrałem wersję spring-jdbc 4.0.3 i otrzymałem od niej H2EmbeddedDatabaseConfigurer.class, która domyślnie ma DB_CLOSE_ON_EXIT=FALSE i zastępuje ją tą na Reliefie spring-jdbc 3.0.5 Relase i wdraża-to w pliku wojennym i działa, zamknięcie VM nie zamknęło zamknięcia bazy danych w pamięci.

Mam nadzieję, że to niezwykłe rozwiązanie pomoże, jeśli inni ludzie, jak ja, nie będą w stanie wdrożyć innego rozwiązania.

Powiązane problemy