私はフライウェイを構成して完全に理解している最中で、次のような状況に陥りました。
ただし、対応するスクリプトに必要な変更を加えて機能させると、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'テーブルを自分で変更する権利があるかどうかはわかりません。フライウェイ自体によってのみ変更する必要があるからです。
だから、私に何が起こったのかを説明した後、私の質問は:
「schema_version」テーブルを自分で変更せずに、フライウェイで失敗した移行を適用する「再試行」する方法はありますか?
このタスクを実行するために知らないコマンドはありますか?
これはFAQで回答されています: http://flywaydb.org/documentation/faq.html#repair
今後のFlyway 2.0には、repairコマンドが含まれます。このコードはすでにSCMにチェックインされています。
注:これはFlywayのメタデータテーブルのみを扱います。移行の失敗によるその他の影響をクリーンアップするのは、引き続き責任があります。
更新:Flyway 2.0がリリースされました。 http://flywaydb.org で入手できます。
これが良いアイデアかどうかはわかりませんが、migrate()が失敗した場合はrepair()を試すことができます。
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();
}
完全な例では、これは常に移行を実行する前に修復を試み、残りの設定は設定ファイルにあります。
@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;
}
}