Spring boot + Spring batch + Flyway + Jooqのサンプルプロジェクトです。
Spring batchを起動し、javaからFlywayでマイグレーションを行い、マイグレーション結果を元にJooq generatorで各モデルクラスを自動生成し、JooqのDSLで各種SQLのテストを行います。javaから任意のタイミングでFlywayとJooq generatorを呼び出しているサンプルとなっています。
MySQLについてはdocker-composeで起動し、起動スクリプトも同梱しています。
- Spring boot version 1.3.3.RELEASE
- Spring batch version 1.3.3.RELEASE
- Flyway version latest
- Jooq version 3.7.3
- MySQL version 5.7
- Docker-engine version latest
- Docker-compose version latest
spring-boot-flyway-jooq-example
┣ master(gradle関連・docker関連)
┗ base(親プロジェクト)
┗ batch(バッチプロジェクト)
MySQLサーバが無い場合は、docker toolbox等でdocker環境を構築して下さい。MySQLコンテナの起動等は後述で行うので、docker toolboxのインストールのみ行って下さい。
- Spring Tool Suite
- STSにGradle Supportをインストール
macの場合はdockerのマウントがホームディレクトリ配下でないと動かない ので、ホームディレクトリ以下でcloneして下さい。
# ホームディレクトリにcd
cd
# checkout
git clone git@github.com:treetips/spring-boot-flyway-jooq-example.git
STS -> Dashboard -> ManageのIDE EXTENSIONS -> Findで「gradle」で検索 -> Gradle Supportをインストール。
STS -> File -> Import -> General -> Existing projects into workspace で
まず、docker-machineでmysql専用ホストを生成し、起動します。
docker-machine create -d virtualbox mysql
docker-machine start mysql
mysqlホストが起動したら、以下の起動スクリプトでdocker上のMySQLサーバをデーモン起動します。
cd master/docker/
./start_container.sh
MySQLサーバのIPを調べます。dockerでMySQLを起動した場合は、以下でIPを確認できます。
docker-machine ip mysql
MySQLのportは3357ですが、変更したい場合は master/docker/docker-compose.ymlを開き、3357を任意のポートに変更して下さい。
ports:
- 3357:3306
これでMySQLのIPとportが解ったので、 batch/src/main/resources/config/application.yml を開き、以下を任意の接続情報に変更して下さい。
url: jdbc:mysql://172.16.53.133:3357/${spring.datasource.schema}?useUnicode=yes&characterEncoding=UTF-8&autoReconnect=true&verifyServerCertificate=false&useSSL=false
dockerでMySQLを起動した場合は、docker-machine create 実行毎にIPが変わるため、任意に設定して下さい。
続いてjavaを実行します。
/batch/src/main/java/com/github/treetips/GenerateMain.java を実行すると、以下の順に処理が実行されます。
Spring batch -> flyway -> jooq generation -> jooq dsl
master/docker にあるファイルは、それぞれ以下の通りです。
- # connect_mysql.sh
- docker上のMySQLサーバにリモート接続します。
- # start_container.sh
- MySQLのコンテナをデーモン起動します。
- # stop_container.sh
- デーモン起動中のMySQLコンテナを終了します。
- # destroy_container.sh
- MySQLコンテナを終了し、破棄します。コンテナが削除されるため、MySQLのデータは全て削除されます。
- # recreate_container.sh
- MySQLコンテナを終了し、破棄し、新たにMySQLのコンテナをデーモン起動します。コンテナが削除されるため、MySQLのデータは全て削除されます。