2011-11-17 3 views
16

프로덕션 환경에서 Oracle을 사용하고 테스트를 위해 H2를 사용하고 싶습니다. 나는 타이핑 할 수있다.H2 db 구성으로 스프링 테스트

<jdbc:embedded-database id="dataSource"> 
    <jdbc:script location="classpath:schema.sql"/> 
    <jdbc:script location="classpath:test-data.sql"/> 
</jdbc:embedded-database> 

그래서 내 테이블과 스크립트가 자동으로 생성됩니다. 하지만이 DB의 URL 값을 설정할 수는 없습니다. (내가 추가해야 할 H2 오라클 호환성을 위해, MODE = 오라클 부분을 URL로)

이 목표를 달성하는 방법이 있습니까?

또는 반대 해결책;

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.h2.Driver"/> 
    <property name="url" value="jdbc:h2:file:h2\db"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/>   
</bean> 

이번에는 URL 부분을 편집 할 수 있지만이 데이터 소스에 기본 테스트 스크립트 (create 및 data sqls)를로드하려면 어떻게해야합니까?

답변

22

이 기술은이 문제를 해결했습니다.

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.username}" /> 
     <property name="password" value="${jdbc.password}" /> 
</bean> 

다음이 태그와 정의를 추가하십시오.

<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS"> 
    <jdbc:script location="classpath:testdb/schema.sql" /> 
    <jdbc:script location="classpath:testdb/data.sql" /> 
</jdbc:initialize-database> 
+0

해당 파일의 내용은 무엇입니까? schema.sql 및 data.sql에는 설정해야 할 항목이 들어 있습니까? – wlk

+0

안녕하세요, 네, 초기 테스트 데이터가 필요합니다. 몇 가지 내용은 많은 서버의 IP 주소, 일부 사용자 역할, 도시 이름 등입니다. – asyard

13

아마도 도움이 될 것입니다 : H2는 INIT script (연결을 열 때 실행되는 SQL 스크립트)을 지원합니다. 데이터베이스 URL는 XML 파일에 아래와 같은

<property name="url" value="jdbc:h2:file:h2\db;INIT= 
RUNSCRIPT FROM 'classpath:schema.sql'\; 
RUNSCRIPT FROM 'classpath:test-data.sql'"/> 

(백 슬래시로 이스케이프 할 ; 요구).

+0

답장을 보내 주셔서 감사합니다. 값이있는 URL을 확장하지 않고 Spring 제공 방식 (jdbc : initialize-database .. 등)을 사용했습니다. 이 기술 또한 도움이됩니다. 고맙습니다. – asyard

관련 문제