Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@mr-hisa-child

JavaEEでFlywayを使う

はじめに

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.

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

参考サイト

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
0
Help us understand the problem. What are the problem?