我正处于配置和充分理解flyway的过程中,我遇到了这种情况:
但是,一旦我对相应的脚本进行了必要的更改,flyway就会继续显示此消息:
Current schema version: 1.0.4
com.googlecode.flyway.core.migration.MigrationException: Migration to version 1.0.4 failed! Please restore backups and roll back database and code!
由于我不想恢复完整转储并再次应用每次迁移,只是为了让alter table脚本工作,我最终做的是对'schema_version'表的一些更改:
在此之后,最终应用了迁移并显示了成功消息,但是我不太确定这是否是处理这种情况的正确方法。我不确定它是否有权自行修改'schema_version'表,因为我认为它只能由flyway本身修改。
所以,在解释发生在我身上的事后,我的问题是:
有没有办法'重试'在flyway中应用失败的迁移,而不是自己修改'schema_version'表?
我不知道要执行此任务的任何命令?
答案 0 :(得分:8)
常见问题解答:http://flywaydb.org/documentation/faq.html#repair
即将推出的Flyway 2.0将包含修复命令。此代码已经检入SCM。
注意:这仅适用于Flyway的元数据表。您仍然有责任清除迁移失败的任何其他影响。
更新:Flyway 2.0现已发布。您可以在http://flywaydb.org
抓住它答案 1 :(得分:4)
我不知道这是不是一个好主意,但如果migrate()失败,你可以尝试修复():
final Flyway flyway = new Flyway();
flyway.setBaselineOnMigrate(true);
flyway.setValidateOnMigrate(false);
flyway.setDataSource(dataSource());
try {
flyway.migrate();
} catch (final Exception e) {
logger.error("Flyway migration failed, doing a repair and retrying ...");
flyway.repair();
flyway.migrate();
}
答案 2 :(得分:0)
完整的示例,它将始终尝试在运行迁移之前修复,其余配置位于配置文件中。
@Configuration
public class PersistanceConfiguration {
protected final Logger log = LoggerFactory.getLogger(this.getClass());
@Bean
public FlywayMigrationStrategy cleanMigrateStrategy() {
FlywayMigrationStrategy strategy = new FlywayMigrationStrategy() {
@Override
public void migrate(Flyway flyway) {
flyway.repair();
flyway.migrate();
}
};
return strategy;
}
}