[SPRING] Spring을 통해 스크립트를 사용하여 메모리 내 HSQLDB를 초기화하는 방법
SPRINGSpring을 통해 스크립트를 사용하여 메모리 내 HSQLDB를 초기화하는 방법
DAO (Spring과 Hibernate 사용)의 단위 테스트를 시도하고 있습니다. 이 튜토리얼에서는 HSQLDB를 사용하고 있습니다. 이 튜토리얼에서는 SQL 스크립트를 사용하여 메모리 내 HSQLDB 데이터베이스를 초기화 할 수 있다고 설명하지만 Spring에서이를 수행하는 방법에 대한 정보는 찾을 수 없습니다. 다음은 적절한 Spring 컨텍스트 설정입니다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:mem:mydb" />
<property name="username" value="sa" />
<property name="password" value="" />
<property name="initialSize" value="5" />
<property name="maxActive" value="10" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="10" />
</bean>
어떤 도움을 주시면 감사하겠습니다. 감사.
해결법
-
==============================
1.메모리 내장 데이터베이스와 Spring을 사용하여 작업하려는 경우 Spring 3에 대한 새로운 jdbc 네임 스페이스가있어 임베디드 데이터베이스 작업을 매우 쉽게 할 수 있습니다.
메모리 내장 데이터베이스와 Spring을 사용하여 작업하려는 경우 Spring 3에 대한 새로운 jdbc 네임 스페이스가있어 임베디드 데이터베이스 작업을 매우 쉽게 할 수 있습니다.
가장 중요한 부분은 DataSource 역할을하므로 기존 DataSource bean을 쉽게 대체 할 수 있습니다.
<jdbc:embedded-database id="dataSource" type="HSQL"> <jdbc:script location="classpath:schema.sql"/> <jdbc:script location="classpath:test-data.sql"/> </jdbc:embedded-database>
Java Config에서이 작업을 수행하는 데 관심이 있다면 EmbeddedDatabaseBuilder (Spring 3.0의 새로운 기능)를 살펴보십시오.
@Configuration public class DatabaseTestConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:schema.sql") .addScript("classpath:test-data.sql") .build(); } }
-
==============================
2.Nicholas 대답은 완벽하게 괜찮지 만 jdbc 네임 스페이스를 사용하여 외부 데이터베이스를 초기화 할 수도 있습니다.
Nicholas 대답은 완벽하게 괜찮지 만 jdbc 네임 스페이스를 사용하여 외부 데이터베이스를 초기화 할 수도 있습니다.
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/DS"/> <jdbc:initialize-database data-source="dataSource"> <jdbc:script location="classpath:/META-INF/database/init.sql"/> </jdbc:initialize-database>
-
==============================
3.튜토리얼에서 연결하는 방법 중 하나는 설정하는 방법입니다 (확실한 수정 후).
튜토리얼에서 연결하는 방법 중 하나는 설정하는 방법입니다 (확실한 수정 후).
나는 이것이 관련있는 것처럼 보일 것이라고 생각한다. 완전 경로 화 된 파일 이름처럼 보이는 것으로 path-to-file을 바꾸는 것이 좋습니다 ...
-
==============================
4.이 문제를 해결하려면 initExecuteSqlFile 및 destroyExecuteSqlFile이라는 두 개의 새 속성에 대한 getters / setters를 사용하여 BasicDataSource의 하위 클래스를 만들어 실행할 SQL 파일 목록을 쉼표로 구분할 수 있습니다. 서브 클래스에는 init / destroy SQL 파일을 처리하는 init () 및 destroy () 메소드가 있습니다.
이 문제를 해결하려면 initExecuteSqlFile 및 destroyExecuteSqlFile이라는 두 개의 새 속성에 대한 getters / setters를 사용하여 BasicDataSource의 하위 클래스를 만들어 실행할 SQL 파일 목록을 쉼표로 구분할 수 있습니다. 서브 클래스에는 init / destroy SQL 파일을 처리하는 init () 및 destroy () 메소드가 있습니다.
그런 다음 다음 bean 정의를 사용하십시오.
<bean id="datasource" class="com.example.MyBasicDataSource" destroy-method="destroy" init-method="init" > <property name="destroyExecuteSqlFile"> <value>h2-destroy-01.sql</value> </property> <property name="initExecuteSqlFile"> <value>h2-init-01.sql,h2-init-02.sql,h2-init-03.sql</value> </property> <!-- Other properties --> </bean>
-
==============================
5.임베디드 데이터베이스를 사용하면 동일한 JVM에서만 데이터베이스에 연결할 수 있습니다. 성능 또는 기타 제약 조건을 위해 두 개의 JVM이있는 경우 다음을 수행 할 수 있습니다.
임베디드 데이터베이스를 사용하면 동일한 JVM에서만 데이터베이스에 연결할 수 있습니다. 성능 또는 기타 제약 조건을 위해 두 개의 JVM이있는 경우 다음을 수행 할 수 있습니다.
from https://stackoverflow.com/questions/9329283/how-to-initialize-in-memory-hsqldb-using-script-via-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안으로 로그인 한 사용자에게 조건 적으로 JSP 컨텐츠를 표시하는 방법 (0) | 2019.01.25 |
---|---|
[SPRING] BeanUtils.copyProperties를 사용하여 특정 필드를 복사 하시겠습니까? (0) | 2019.01.25 |
[SPRING] MongoDB와 최대 절전 모드 (0) | 2019.01.25 |
[SPRING] Java EE에서 CDI를 사용해야하는 이유 (0) | 2019.01.25 |
[SPRING] Spring에서 @Valid와 @Validated의 차이점 (0) | 2019.01.25 |