2013-11-25 4 views
0

Я перехожу из XML в конфигурацию Spring на основе Java. Ниже приведена моя конфигурация 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; 
} 
Смежные вопросы