FlywayのJavaコードによるマイグレーション

スポンサーリンク

JavaのデータベースマイグレーションのライブラリであるFlywayですが、SQLファイルだけでなく、Javaのコードによるマイグレーションにも対応しています。

やり方は簡単で、SQLファイルと同じパッケージ(デフォルトだとdb.migration)配下に、SQLファイルと同じ規則でBaseJavaMigration を継承したクラスを追加して、migrateメソッドを実装するだけです。

package db.migration;

import org.flywaydb.core.api.migration.BaseJavaMigration;
import org.flywaydb.core.api.migration.Context;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;

public class V2__Load_data extends BaseJavaMigration {

    @Override
    public void migrate(Context context) throws Exception {

        NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(
                new SingleConnectionDataSource(context.getConnection(), true));

        jdbcTemplate.update(
                "INSERT INTO customers(first_name, last_name, address) VALUES (:firstName, :lastName, :address)",
                new MapSqlParameterSource()
                        .addValue("firstName", "Taro")
                        .addValue("lastName", "Yamada")
                        .addValue("address", "Chiba"));
    }
}

SQLで書くのが面倒なもの(ロジック自体が既にJava側にあるようなものとか)は、SQLで頑張らずにJava側での処理で行った結果をデータベースに登録する、、といったことで手間が減らせそうです。
また、データベース以外(ファイルとして保存されているようなデータとか)のマイグレーションも、これを使うと合わせて行うことができるので、いろいろ幅が広がりそうだなーと思いました。