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

2022-09-01 06:30:35

我正在尝试对我的DAO进行单元测试(使用Spring和Hibernate)。我在本教程中使用HSQLDB。本教程指出,内存中的HSQLDB数据库可以使用SQL脚本进行初始化,但我找不到有关如何在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命名空间,可以使嵌入式数据库的使用变得非常容易。

最好的部分是它充当 ,因此可以很容易地将其放入以替换您现有的Bean。DataSourcedataSource

<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做这件事更感兴趣,看看IndeddedDatabaseBuilder(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

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

推荐