我们有一个流程,最后有一个可重复的脚本,永远不会改变。因此校验和不会改变。 有没有办法告诉Flyway运行它,无论它是否以前运行过?强迫它再次运行。
目前,我以编程方式使用唯一注释更改文件以强制它运行。但是当脚本在Jar中时会变得棘手。
答案 0 :(得分:4)
这听起来像你的脚本应该作为回调运行,这将为你提供所需的行为。
答案 1 :(得分:1)
Axels答案是开箱即用的正确答案。
如果您有其他要求,例如在schema_version
中保留其执行记录,则可以使用Java Migrations将其执行包装在random checksum中。
public class R__MyRepeatable implements JdbcMigration, MigrationChecksumProvider {
@Override
public final void migrate(Connection connection) throws Exception {
String scriptLocation = "path/to/maintenance_script.sql";
try (InputStream in = getClass().getResourceAsStream(scriptLocation)) {
if (in == null) {
throw new IllegalStateException("Cannot find file: " + scriptLocation);
}
String sql = IOUtils.toString(in, "UTF-8");
connection.prepareStatement(sql).execute();
}
}
@Override
public Integer getChecksum() {
return ...; // Whatever random / timebased scheme you want.
}
}
答案 2 :(得分:0)
如果你命名你的脚本'afterMigrate.sql'那么它在迁移后每次都会被flyway执行。请参阅Flyway文档https://flywaydb.org/documentation/callbacks 1