Help us understand the problem. What is going on with this article?

JavaEEでFlywayを使う

More than 1 year has passed since last update.

はじめに

FlywayとはJava用に開発されたDBマイグレーションツールです。
DBマイグレーションとは、簡単に言えば、DBのバージョン管理ですね。

DBマイグレーションツールを使わない場合、環境によってDB構成に差異が生じて、アプリケーションの動作にも影響してきます。flywayを使うことで、DB変更によるアプリケーション障害の影響は減らせると思います。

今までどうやっていたか

マイグレーションツールがなかった時代は、A5M2やERMasterなどのER図作成ツールを使い、DDL出力しDBを作成していました。構成に変更があったときは、ER図を更新し、更新用のDDLをExcelなどで管理していました。

以前、Playframeworkという、Java、Scalaのフレームワークを使っていた時があったのですが、
エンティティクラスを変更するだけで、フレームワークがDBとの差異を検知し、自動で更新してくれていました。

今回お話するJavaEEにはそのような機能はないので、Flywayを使うことになります。

flywayを調べると、SpringBootとの連携の記事が多く、JavaEE連携の記事が少ないように思いましたので、使い方を残すことにしました。

対象

  • JavaEE7
  • NetBeans8.2
  • Flyway5.2.4
  • PostgreSQL9.6

準備

MavenでWebアプリケーションプロジェクトを作成します。(Webでなくても問題ないです。)

pom.xmlを以下のように編集します。

pom.xml
・・・
<dependencies>
    ・・・
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4-1206-jdbc41</version>
    </dependency>
</dependencies>

<plugins>
    ・・・
    <plugin>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-maven-plugin</artifactId>
        <version>5.2.4</version>
        <configuration>
            <url>jdbc:postgresql://<ホスト名>:<ポート>/flywaydb</url>
            <user><ユーザ名></user>
            <password><パスワード></password>
        </configuration>
    </plugin>
</plugins>

src/main/resources/db/migrationに以下のファイルを作成します。
作成するファイルには命名規則があるので注意が必要です。

V__ + (バージョン番号) + (任意の名前) + .sql

__はアンダースコアが2つです。

V1__create_user.sql
create table users (
    id int not null,
    name varchar(100) not null
);

実行

$ cd <プロジェクトのルート>
$ mvn flyway:migrate

DB構成に変更があった場合は、命名規則に従ってsqlファイルを作成します。

NetBeanとの連携

アプリケーションの実行やデバッグを行う場合、IDEの機能を利用することが多いと思います。
現状、マイグレーションをコマンドで個別に実行する必要があるので、NetBeansと連携したみたいと思います。

プロジェクトを右クリック->[プロパティ]を開きます。
カテゴリの[アクション]を開きます。
使っている構成(通常はデフォルト構成)を選択します。
[プロジェクトのビルド]を選択し、[ゴールの実行]の設定値を以下のように変更します。

(変更前) install
(変更後) flyway:migrate install

設定が完了したら、[OK]ボタンでプロパティ画面を閉じます。

連携を確認

プロジェクトを右クリック->[ビルド]を実行します。

--- flyway-maven-plugin:5.2.4:migrate (default-cli) @ flyway-javaee ---
Flyway Community Edition 5.2.4 by Boxfuse
Database: jdbc:postgresql://localhost:25432/flywaydb (PostgreSQL 9.6)
Successfully validated 1 migration (execution time 00:00.066s)
Current version of schema "public": 1
Schema "public" is up to date. No migration necessary.

上記のログが出力されれば成功です。

参考サイト

mr-hisa-child
自称フルスタックエンジニアです。デザイン(CSS)は苦手ですが、フロントエンドからサーバサイドまで面倒見れます。 Java / SpringBoot / JavaEE / Quarkus / AWS / vuejs / Nuxtjs / AWSソリューションアーキテクトアソシエイト / VSCode / BootStrap / Vuetify / TypeScript
frevoworks
AWSを用いたクラウドアプリケーションの開発・保守を行っています。
https://www.frevo-works.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした