在我的情况下,我使用带有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;
}
答案 0 :(得分:1)
去Flyway.clean()。它完全符合你的要求。无需编写自己的重置脚本。