takeda_san’s blog

KotlinとVRを頑張っていく方向。

FlywayのアップグレードしたらFlywayEditionUpgradeRequiredExceptionが出た

きっかけ

久しぶりにコードに変更入れるアプリケーションがあり、ついでに諸々ライブラリのバージョンを雑に上げていたのですが珍しい例外出たのでメモ。
Spring BootでデータベースのマイグレーションにFlywayを使ってました。

Flywayのバージョンは 5.1.x系から8.0.x系までオリャっと上げたときの事象です。

エラー

"org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.license.FlywayEditionUpgradeRequiredException: Flyway Teams Edition or MySQL upgrade required: MySQL 5.6 is no longer supported by Flyway Community Edition, but still supported by Flyway Teams Edition.

原因

例外クラス名にも書いてありますが、MySQL 5.6で使う場合は「Flyway Teams Edtion」に上げなさいということですね。
確かにAWSのAuroraでMySQL5.6使ってます。
ローカルは8系とか他のDBで代用していて、いざ本番デプロイしたら例外でSpring Boot起動しないみたいな事故は起こりそう。

Flyway Teams Edition or MySQL upgrade required: MySQL 5.6 is no longer supported by Flyway Community Edition, but still supported by Flyway Teams Edition.

対応

対応案1:Teams editionにアップグレード

お金払って、「Teams editon」にしましょうというのが普通な対応。
これを書いている現在、MySQL 8.0のみ無償の「Community edition」ではサポートしている模様。

MySQL - MySQL - Flyway by Redgate • Database Migrations Made Easy.

対応案2:MySQLを8系に上げる

素直にバージョン上げられる環境の場合は、これでよさそうです。
AWSのAuroraとか使っていて5.6、5.7互換しか選択肢がない場合は、厳しい。

対応案3:Flywayの5.2.4を使う

最後はあまりお勧めしませんが、古いバージョンである5.2.4を使う。
詳しく調べてないのですが、おそらく有償サポート版が入る前の最後のバージョンなのかなと思います。 MavenのUsaseの5.2.4だけ突出してるのは、そいういうことですね。

f:id:takeda_san:20211106151919p:plain

対応案4:脱Flyway

そんなに激しくデーブル定義を変えないようであれば、次からは手動か代替の手段でマイグレーションするようにする。
今回の私の選択はこれです。
機能追加も落ち着き、それほど更新頻度もないので手動での管理に切り替えました。
コードテストの環境作成でもFlyway使ってましたが、DDLをテストコード側で実行するように切り替えています。