【发布时间】:2017-03-01 09:59:49
【问题描述】:
我们有一个流程,其末尾有一个永不改变的可重复脚本。所以校验和不会改变。 有没有办法告诉 Flyway 运行它,而不管它之前是否运行过?强制它再次运行。
目前,我正在使用独特的注释以编程方式更改文件以强制它运行。但是当脚本在 Jar 中时会变得很棘手。
【问题讨论】:
标签: flyway
我们有一个流程,其末尾有一个永不改变的可重复脚本。所以校验和不会改变。 有没有办法告诉 Flyway 运行它,而不管它之前是否运行过?强制它再次运行。
目前,我正在使用独特的注释以编程方式更改文件以强制它运行。但是当脚本在 Jar 中时会变得很棘手。
【问题讨论】:
标签: flyway
听起来您的脚本应该作为回调运行,这将为您提供所需的行为。
【讨论】:
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.
}
}
【讨论】:
如果您将脚本命名为“afterMigrate.sql”,则每次迁移后都会通过 flyway 执行它。参见 Flyway 文档https://flywaydb.org/documentation/callbacks1
【讨论】: