Flyway - 强制运行可重复的脚本

时间:2016-10-19 16:24:22

标签: flyway

我们有一个流程,最后有一个可重复的脚本,永远不会改变。因此校验和不会改变。 有没有办法告诉Flyway运行它,无论它是否以前运行过?强迫它再次运行。

目前,我以编程方式使用唯一注释更改文件以强制它运行。但是当脚本在Jar中时会变得棘手。

3 个答案:

答案 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