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

Posted

技术标签:

【中文标题】使用flyway时在启动时清除数据库【英文标题】:Clear database at startup while using flyway 【发布时间】:2015-06-26 22:57:10 【问题描述】:

就我而言,我使用带有 gradle 的 spring-boot 并通过简单地将 compile 'org.flywaydb:flyway-core' 放入 build.gradle 来添加 flyway。

对于test 中的模拟器运行,我想在每次运行之前清除数据库。我在/src/test/resources/db/migration/V1.0__Reset.sql 中添加了reset script(真正的初始化sql 脚本位于/src/main/resources/db/migration/V1.1__Init.sql),但由于重置脚本而收到SyntaxException,当我从mysql Workbench 运行它时不会发生这种情况。

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

-- 更新--

我尝试使用 Spring DataSourceInitializer,但似乎 Flyway 脚本在 DS 初始化之前执行,因此由于未找到表而导致休眠语法错误。

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

【问题讨论】:

重置脚本中有什么语法错误? 来自***.com/questions/12403662/…答案的脚本 【参考方案1】:

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

【讨论】:

这是一个类似的问题(至少解决方案是):***.com/questions/29745995/…

以上是关于使用flyway时在启动时清除数据库的主要内容,如果未能解决你的问题,请参考以下文章

在应用程序退出时清除数据

当我重新启动移动设备或此 android/firebase 应用程序时,Firebase 离线数据库数据被清除?*

我应该啥时候清除我的 iOS 应用程序的垃圾数据?在启动或终止期间?

使用重组时在哪里设置`setInterval`?

Centos6 or 7 密码清除

关于日志文件的清除。