java - 初始化数据库模式并添加测试数据

标签 java spring h2

我正在从 XML 切换到基于 Java 的 Spring 配置。以下是我用于设置和初始化 H2 数据库的 xml 配置。

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

以下是我在服务器模式下设置 H2 数据库的基于 java 的配置。

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

如何运行脚本来初始化架构并添加一些测试数据?有什么想法吗?

最佳答案

我找到了一种方法。

@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;
}

关于java - 初始化数据库模式并添加测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197594/

相关文章:

java - H2:JdbcSQLException:此 CLOB 或 BLOB 引用超时

java - 如何使用 Java 和 JDBC 将文本文件存储在 h2 数据库中?

java - 在 Scala 中使用 Java 库

java - 包含多个对象的 ArrayList 的序列化,不保存对象状态

java - IntelliJ Idea 结构搜索所有导入接口(interface)的实现

java - Spring boot 和 Spring Security inMemoryAuthentication 不起作用

Javassist仪器

java - 如何用JDBC执行一组相关的SQL指令?

java - 在实现抽象类的类中导入的配置类中使用来自抽象配置类的 bean

jdbc - Play Framework : Error getting sequence nextval using H2 in-memory database