使用flyway时在启动时清除数据库

时间:2015-04-20 09:33:56

标签: mysql spring spring-boot flyway

在我的情况下,我使用带有gradle的spring-boot并通过简单地将compile 'org.flywaydb:flyway-core'添加到build.gradle来添加flyway。

对于test中的模拟器运行,我想在每次运行之前清除数据库。我已将reset script放在/src/test/resources/db/migration/V1.0__Reset.sql中(使用真正的初始化sql脚本位于/src/main/resources/db/migration/V1.1__Init.sql),但由于重置脚本而没有收到SyntaxException,而且没有当我从MySQL Workbench运行它时发生。

如何在启动时重置或清除数据库?

- 更新 -

我尝试使用Spring DataSourceInitializer,但似乎在DS init之前执行了Flyway脚本,因此导致Hibernate语法错误,因为找不到表格。

@Resource
DataSource ds;

@Bean
public DataSourceInitializer dbInit() throws FileNotFoundException, URISyntaxException {
        public DataSourceInitializer dbInit() throws FileNotFoundException, URISyntaxException {
        DataSourceInitializer re = new DataSourceInitializer();
        re.setDataSource(ds);
        re.setEnabled(true);

        String str = "classpath:sql/V1.0__Reset.sql";
        URL url = ResourceUtils.getURL(str);
        org.springframework.core.io.Resource resi = new PathResource(url.toURI());
        // new org.springframework.core.io.ClassPathResource(str)
        re.setDatabasePopulator(new ResourceDatabasePopulator(resi));
        return re;
    }

1 个答案:

答案 0 :(得分:1)

去Flyway.clean()。它完全符合你的要求。无需编写自己的重置脚本。