【发布时间】: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;
}
【问题讨论】:
-
重置脚本中有什么语法错误?
标签: mysql spring spring-boot flyway