使用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时在启动时清除数据库的主要内容,如果未能解决你的问题,请参考以下文章
按下按钮时在 UITableView 单元格中清除 UITextField 的文本
当我重新启动移动设备或此 android/firebase 应用程序时,Firebase 离线数据库数据被清除?*