[SPRING] 테스트 용 임베디드 H2 데이터베이스 용 스프링 구성
SPRING테스트 용 임베디드 H2 데이터베이스 용 스프링 구성
임베디드 h2 데이터 소스와 선택적으로 JUnit을 사용하여 통합 테스트를위한 Spring 구성이 어떻게 생겼습니까?
기본적으로 SingleConnectionDataSource에 대한 첫 번째 시도가 성공했지만 동시에 여러 연결이 필요하거나 트랜잭션이 일시 중단 된 더 복잡한 테스트에서는 실패했습니다. 나는 TCP 기반 서버 모드에서 h2가 잘 작동한다고 생각하지만, 이것은 아마도 메모리에 임시 임베디드 데이터베이스를위한 가장 빠른 통신 모드가 아닙니다.
가능성과 장점 / 단점은 무엇입니까? 또한 어떻게 테이블을 생성하고 데이터베이스를 채우는가?
업데이트 : 이러한 테스트에 중요한 몇 가지 구체적인 요구 사항을 지정해 보겠습니다.
해결법
-
==============================
1.데이터베이스를 검사 할 수있는 도구가 있는지 모르겠다는 이유로, HSQL, H2 및 Derby를 지원하는 Spring 임베디드 데이터베이스 (3.1.x 문서, 현재 문서)를 사용하는 것이 간단한 해결책이라고 생각합니다. .
데이터베이스를 검사 할 수있는 도구가 있는지 모르겠다는 이유로, HSQL, H2 및 Derby를 지원하는 Spring 임베디드 데이터베이스 (3.1.x 문서, 현재 문서)를 사용하는 것이 간단한 해결책이라고 생각합니다. .
H2를 사용하면 XML 구성은 다음과 같이 나타납니다.
<jdbc:embedded-database id="dataSource" type="H2"> <jdbc:script location="classpath:db-schema.sql"/> <jdbc:script location="classpath:db-test-data.sql"/> </jdbc:embedded-database>
Java 기반 구성을 선호하는 경우 이와 같이 DataSource를 인스턴스화 할 수 있습니다 (EmbeddedDataBase가 DataSource를 확장 함).
@Bean(destroyMethod = "shutdown") public EmbeddedDatabase dataSource() { return new EmbeddedDatabaseBuilder(). setType(EmbeddedDatabaseType.H2). addScript("db-schema.sql"). addScript("db-test-data.sql"). build(); }
데이터베이스 테이블은 db-schema.sql 스크립트에 의해 작성되며 db-test-data.sql 스크립트의 테스트 데이터로 채워집니다.
클래스 경로에 H2 데이터베이스 드라이버를 추가하는 것을 잊지 마십시오.
-
==============================
2.현재 테스트 전용 springconfig-file에 데이터 소스를 포함하고 있습니다 :
현재 테스트 전용 springconfig-file에 데이터 소스를 포함하고 있습니다 :
<bean id="database.dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"> <constructor-arg> <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="org.h2.Driver" /> <property name="url" value="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2" /> </bean> </constructor-arg> </bean> <!-- provides a H2 console to look into the db if necessary --> <bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server" factory-method="createWebServer" depends-on="database.dataSource" init-method="start" lazy-init="false"> <constructor-arg value="-web,-webPort,11111" /> </bean>
AbstractAnnotationAwareTransactionalTests.onSetUpBeforeTransaction을 오버라이드 할 때 executeSqlScript를 사용하거나 적절한 위치에 SimpleJdbcTestUtils.executeSqlScript를 사용하여 테이블을 생성 / 삭제할 수 있습니다.
이 게시물을 비교해보십시오.
-
==============================
3.H2는 기본 제공 연결 풀 구현과 함께 번들로 제공됩니다. 다음 XML은 DBCP 또는 C3P0에 대한 추가 종속성을 도입 할 필요없이 Datasource bean으로서이를 사용하는 예제를 제공합니다.
H2는 기본 제공 연결 풀 구현과 함께 번들로 제공됩니다. 다음 XML은 DBCP 또는 C3P0에 대한 추가 종속성을 도입 할 필요없이 Datasource bean으로서이를 사용하는 예제를 제공합니다.
<bean id="dataSource" class="org.h2.jdbcx.JdbcConnectionPool" destroy-method="dispose"> <constructor-arg> <bean class="org.h2.jdbcx.JdbcDataSource"> <property name="URL" value="jdbc:h2:dbname"/> <property name="user" value="user"/> <property name="password" value="password"/> </bean> </constructor-arg> </bean>
Spring 응용 프로그램 컨텍스트가 닫힐 때 dispose 메서드를 호출하여 데이터베이스를 종료합니다.
-
==============================
4.단위 테스트를 위해 프로덕션 DataSource 구현 (다른 연결 문자열 만 사용)을 사용하는 것이 가장 좋습니다.
단위 테스트를 위해 프로덕션 DataSource 구현 (다른 연결 문자열 만 사용)을 사용하는 것이 가장 좋습니다.
어쨌든 "더 복잡한 테스트를 통과하지 못했습니다."라는 대답은 자세한 답변을 얻기에 충분한 정보를 제공하지 못합니다.
(자체 광고 : 이것을 확인하십시오)
from https://stackoverflow.com/questions/2012292/spring-configuration-for-embedded-h2-database-for-tests by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 : 뚱뚱한 항아리가있는 임의의 디렉토리에서 외부 application.properties 파일을 사용할 수 있습니까? (0) | 2018.12.22 |
---|---|
[SPRING] Thymeleaf를 사용하여 Spring 모델에서 javascript 변수 설정하기 (0) | 2018.12.22 |
[SPRING] 봄 보안 HTTP RESTFul에 기본 및 웹용 FormLogin (쿠키) - 주석 (0) | 2018.12.22 |
[SPRING] 멀티 파트 파일을 파일로 변환하는 방법? (0) | 2018.12.22 |
[SPRING] Spring-Boot : 최대 연결 수와 같은 JDBC 풀 속성을 어떻게 설정합니까? (0) | 2018.12.22 |