如何使用Spring通过脚本初始化内存中的HSQLDB

Joh*_*n B 35 java spring 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> 
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢.

nic*_*ild 74

如果您正在尝试使用内存数据库和Spring,那么jdbcSpring 3有一个新的命名空间,可以很容易地使用嵌入式数据库.

最好的部分是它充当a DataSource,因此可以轻松地将其放入以替换现有的dataSourcebean.

<jdbc:embedded-database id="dataSource" type="HSQL">
    <jdbc:script location="classpath:schema.sql"/>
    <jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>
Run Code Online (Sandbox Code Playgroud)

如果您对使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为提及hsqldb所需的依赖性也很好 (3认同)
  • +1.我的[回答](http://stackoverflow.com/a/9329628/649852)适用于Spring 2.X; 现在我们正在使用Spring 3.X,我想我们将采用这种方法. (2认同)

omn*_*nom 6

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>
Run Code Online (Sandbox Code Playgroud)