2016-05-26 4 views
13

スプリングブートプロジェクトでフライウェイを使用してマイグレーションが失敗した場合、私が何をすべきか分かりません。スプリングブートを使用したフライウェイ修理

私はpom.xmlにFlywayの依存関係を追加するだけでFlywayを有効にしました。そして、すべて正常に動作します。私のデータベーススクリプトは、Spring Bootアプリケーションを起動すると移行されます。

私のスクリプトの1つにエラーがあり、最後の移行に失敗しました。今私が移行しようとすると、 "Migration Checksum Mismatch"があります。通常、私はmvn flyway:repairを実行しますが、私はSpring Bootを使用しているので、Flyway Mavenプラグインを使用するはずがありません。では私は何をすべきですか?

+0

私は '以前のSQLファイルは非常に例外的であるべき変えるようrepair'フライウェイを手動で実行と言うでしょう。しかし、チェックサムはクラスパスとローカルのSQLファイルの間で一致しません。 – Dush

+0

しかし、私が言ったように、Spring Bootを使用する場合、Flywayプラグインを使用することは期待されません。 –

+0

いいえ、フライウェイを使用すると、既存のSQLファイルを変更する予定はありません!特にprod dbで既に実行されている場合 毎回変更を加えた新しいSQLファイルのみを追加してください。 私はspring-bootがこれをサポートしていない理由を理解することができます。これは手動での操作のままで、必ずしもデフォルトではありません。(SQLの変更は無視されています) – Dush

答えて

8

データベースの修復を実行する方法はいくつかあります。私は個人的に単純なSQLステートメントを好む。

SQL文:

移行が失敗した行を削除するだけです。その後、再度マイグレーションを実行できます。

実行が使用フライウェイのMavenプラグイン

があなたのポンポンにFlyway Maven Pluginを追加し、mvn flyway:repairを実行し、直接

あなたはフライウェイは、ローカルにインストールすることができますフライウェイとコンソール

flyway repairを実行します。私はこれがSpring Bootのコンセプトと矛盾しているとは思わない。

春ブーツ

を拡張春ブーツは、データベースの移行を実行するためにFlyway.migrate()を呼び出します。あなたがもっとコントロールしたい場合は、FlywayMigrationStrategyを実装する@Beanを提供してください。

FlywayMigrationStrategyでは、flywayからmigrateまたはrepairメソッドを呼び出すことができます。詳細はSpring Boot Reference Guideをご覧ください。

アプリケーション内のFlywayMigrationStrategyは、データベースを修復する適切な場所ではないと思います。移行の失敗は例外であり、アプリケーションの外部で処理する必要があります。

+0

flyway-maven-pluginはSpringの起動application.propertiesファイルからデータソースのプロパティを読み取ることができますか? – ieXcept

+0

@DanielKäferFlywayCallbackを使用して、移行が開始する前にschema_versionのデータをクリーンアップ(つまり、失敗した移行を削除)する方法はありますか? –

+0

@DharmvirTiwariこれは良い考えだとは思わない。初めて失敗すると、2回目に失敗します。スキーマを動作させるには何かをしなければならず、schema_versionテーブルの行を削除することができます。 –

2

フライウェイのMavenプラグイン

ただ、ダニエルの答え@

1.

 ... 
     <plugin> 
      <groupId>org.flywaydb</groupId> 
      <artifactId>flyway-maven-plugin</artifactId> 
      <version>4.1.0</version> 
      <configuration> 
       <url>jdbc:mysql://localhost:3306</url> 
       <user>root</user> 
       <password>root</password> 
       <schemas> 
        <schema>[your_schema]</schema> 
       </schemas> 
      </configuration> 
     </plugin> 
     ... 

2.

MVNフライウェイにこの情報を追加します。クリーン

3.

MVNフライウェイ:修理

PS:ステップ2と3は、順序を変更する動作しない場合。Mavenのゴールで

さらに詳しい情報:https://flywaydb.org/documentation/maven/

+0

flyway-maven-pluginはSpringの起動application.propertiesファイルからデータソースのプロパティを読み込むことができますか? – ieXcept

+0

@ieXceptプロパティファイルにどのような情報を追加しますか? –

+0

私はすでに 'spring.datasource.url'、' spring.datasource.username'、 'spring.datasource.password'を追加しました。それは私のアプリがdbに接続する方法です。このプロパティをプラグインに再利用することはできますか? – ieXcept

関連する問題