복붙노트

[SPRING] Spring의 임베디드 H2 데이터 소스 및 DB_CLOSE_ON_EXIT

SPRING

Spring의 임베디드 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. ==============================

    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. ==============================

    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의 종료로 인해 메모리 데이터베이스의 종료가 발생하지 않았습니다.

    다른 사람이 다른 솔루션을 구현할 수없는 경우이 특이한 솔루션이 도움이되기를 바랍니다.

  3. from https://stackoverflow.com/questions/15613722/spring-s-embedded-h2-datasource-and-db-close-on-exit by cc-by-sa and MIT license