Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to initialize in-memory HSQLDB using script via Spring

I am attempting to do unit testing of my DAO (using Spring and Hibernate). I am using HSQLDB per this tutorial. The tutorial states that the in-memory HSQLDB database can be initialized using a SQL script but I cannot find information on how to do so in Spring. Here is the pertinent Spring context config:

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

Any help would be appreciated. Thanks.

like image 318
John B Avatar asked Feb 17 '12 13:02

John B


People also ask

Is Hsqldb in-memory?

HSQLDB (HyperSQL DataBase) is the leading SQL relational database system written in Java. It offers a small, fast multithreaded and transactional database engine with in-memory and disk-based tables and supports embedded and server modes.


1 Answers

If you are trying to work with in-memory databases and Spring, there is a new jdbc namespace for Spring 3 that makes working with embedded databases very easy.

The best part is that it acts as a DataSource, so it can easily be dropped in to replace your existing 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> 

If you are more interested in doing this with Java Config, take a look at the EmbeddedDatabaseBuilder (new in 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();     } } 
like image 53
nicholas.hauschild Avatar answered Oct 02 '22 11:10

nicholas.hauschild