[SPRING] Spring의 임베디드 H2 데이터 소스 및 DB_CLOSE_ON_EXIT
SPRINGSpring의 임베디드 H2 데이터 소스 및 DB_CLOSE_ON_EXIT
단위 테스트의 경우 (원하는 경우 통합 테스트라고 함) Spring 구성에 내장 데이터베이스를 다음과 같이 구성했습니다.
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:schema_h2.sql" />
</jdbc:embedded-database>
이제 명령 줄에서 테스트를 실행할 때 정상적으로 작동하지만 끝에 오류가 발생합니다 (무해하지만 자극적입니다).
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]
이제 예외에 포함 된 팁은 일반적으로 문제가 없지만 임베디드 데이터 소스에이 속성을 어떻게 추가합니까? 이러한 '고급'기능을 추가하려면 확장하고 말로 직접 구성해야합니까?
해결법
-
==============================
1.JDBC URL에 매개 변수 지정 jdbc : h2 : ~ / test; DB_CLOSE_ON_EXIT = FALSE
JDBC URL에 매개 변수 지정 jdbc : h2 : ~ / test; DB_CLOSE_ON_EXIT = FALSE
또한 인 메모리 테스트 데이터베이스의 경우 다음과 같이 DB_CLOSE_DELAY = -1을 추가하는 것이 좋습니다.
jdbc:h2:mem:alm;MODE=Oracle;DB_CLOSE_DELAY=-1
임베디드 데이터베이스에 JDBC 연결 URL을 추가하려면 다음과 같이 변경하십시오.
<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>
-
==============================
2.나는 Michael Piefel의 것과 같은 문제가 있었고 Michail Nikolaev가 설명 한 솔루션을 구현하려고했습니다. 그러나 어떻게 든 봄 일괄 처리가 작동하지 않았으므로 메타 데이터 JOB_ * 테이블이 어디에 있습니까? 따라서 내 응용 프로그램에서 사용하는 spring-jdbc 버전이 3.0.5이고 스프링 프레임 워크를 늘리면 dwr (내 응용 프로그램에서 사용)과 충돌하여 스프링, dwr 및 gmaps api를 기반으로하는 지리적 위치입니다. spring-jdbc 4.0.3 릴리스를 다운로드하여 기본적으로 DB_CLOSE_ON_EXIT = FALSE 인 H2EmbeddedDatabaseConfigurer.class를 가져 와서 spring-jdbc 3.0.5의 릴리스와 대체하십시오. 전쟁 파일에서 릴리스 및 배치 -it 작동하지만 VM의 종료로 인해 메모리 데이터베이스의 종료가 발생하지 않았습니다.
나는 Michael Piefel의 것과 같은 문제가 있었고 Michail Nikolaev가 설명 한 솔루션을 구현하려고했습니다. 그러나 어떻게 든 봄 일괄 처리가 작동하지 않았으므로 메타 데이터 JOB_ * 테이블이 어디에 있습니까? 따라서 내 응용 프로그램에서 사용하는 spring-jdbc 버전이 3.0.5이고 스프링 프레임 워크를 늘리면 dwr (내 응용 프로그램에서 사용)과 충돌하여 스프링, dwr 및 gmaps api를 기반으로하는 지리적 위치입니다. spring-jdbc 4.0.3 릴리스를 다운로드하여 기본적으로 DB_CLOSE_ON_EXIT = FALSE 인 H2EmbeddedDatabaseConfigurer.class를 가져 와서 spring-jdbc 3.0.5의 릴리스와 대체하십시오. 전쟁 파일에서 릴리스 및 배치 -it 작동하지만 VM의 종료로 인해 메모리 데이터베이스의 종료가 발생하지 않았습니다.
다른 사람이 다른 솔루션을 구현할 수없는 경우이 특이한 솔루션이 도움이되기를 바랍니다.
from https://stackoverflow.com/questions/15613722/spring-s-embedded-h2-datasource-and-db-close-on-exit by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 런타임“qualifier”변수를 사용하여 서비스를 동적으로 주입하는 방법은 무엇입니까? (0) | 2019.08.13 |
---|---|
[SPRING] 스프링이 DB와의 연결이 끊어지고 복구하거나 다시 연결하지 않습니다 (0) | 2019.08.13 |
[SPRING] 각도 5를 통해 파일 객체를 Spring Rest 컨트롤러로 보내기 (0) | 2019.08.13 |
[SPRING] Struts2의 모든 뷰에 객체를 어떻게 노출시킬 수 있습니까? (0) | 2019.08.13 |
[SPRING] Spring 애플리케이션에서 컨테이너 시작시 편안한 엔드 포인트 기록 (0) | 2019.08.13 |