2013-11-25 125 views
0

我正在從XML切換到基於Java的Spring配置。以下是我的xml配置來設置和初始化我的H2數據庫。初始化數據庫模式並添加測試數據

<beans profile="test-h2"> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close"> 
     <property name="driverClassName" value="org.h2.Driver"/> 
     <property name="url" value="jdbc:h2:target/h2/pps;AUTO_SERVER=TRUE"/> 
     <property name="username" value="sa"/> 
     <property name="password" value=""/> 
    </bean> 
    <bean id="entityManagerFactory" parent="entityManagerFactoryCommonParent"> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">create-drop</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 
</beans> 

以下是我的基於java的配置,以在服務器模式下設置我的H2數據庫。

private static final String H2_JDBC_URL_TEMPLATE = "jdbc:h2:%s/db/merchant;AUTO_SERVER=TRUE"; 
private DataSource createH2DataSource() { 
    String jdbcUrl = String.format(H2_JDBC_URL_TEMPLATE, System.getProperty("user.home")); 
JdbcDataSource ds = new JdbcDataSource();  
ds.setURL(jdbcUrl); 
ds.setUser("sa"); 
ds.setPassword(""); 
return ds; 
} 

如何運行腳本來初始化模式並添加一些測試數據?有任何想法嗎?

+0

如果是爲了測試,看看DbUnit的http://dbunit.sourceforge.net/或DBSetup http://dbsetup.ninja-squad.com/index.html – benzonico

+0

我寫一個Java配置,在測試,開發和生產過程中很有用,並且能夠在執行期間根據傳遞的參數在數據庫(h2,oracle,mysql等)之間切換。 – yousafsajjad

回答

0

我找到了一種方法來做到這一點。

@Value("classpath:seed-data.sql") 
private Resource H2_SCHEMA_SCRIPT; 

@Value("classpath:test-data.sql") 
private Resource H2_DATA_SCRIPT; 

@Value("classpath:drop-data.sql") 
private Resource H2_CLEANER_SCRIPT; 


@Bean 
public DataSource dataSource(Environment env) throws Exception { 
     return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();   
} 


@Autowired 
@Bean 
public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { 

    final DataSourceInitializer initializer = new DataSourceInitializer(); 
    initializer.setDataSource(dataSource); 
    initializer.setDatabasePopulator(databasePopulator()); 
    return initializer; 
} 


private DatabasePopulator databasePopulator() { 
    final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); 
    populator.addScript(H2_SCHEMA_SCRIPT); 
    populator.addScript(H2_DATA_SCRIPT); 
    return populator; 
}