目的
Springと親和性の高いOSS DBFluteですが、公式ドキュメントでSpring Boot固有の説明があまりないためアドベントカレンダーで世に出します。
環境
2023/12/15時点。下記のバージョンで動作確認して記事を書きました
- JDK 17
- DBFlute 1.2.7
- Spring Boot 3.2
DBFluteを導入してみよう
Spring Bootプロジェクトを作る
Spring Initializrで Spring Bootプロジェクトを作成します。
ポイント
- DBFluteのセットアップがMavenベースなのでMavenを選択。Gradleを使いたい場合、実行時はGradleを使うことも可能です
- コンパイルと実行に必要な、JDBC と JDBCドライバも選択しておきます
DBFluteをセットアップする
https://dbflute.seasar.org/ja/environment/setup/maven.html の通りです。
Spring Bootでは下記を追加で行います。
- Spring BootはMaven Wrapperを利用しているので、DBFlute公式ドキュメントで
mvn
はmvnw
に読み替えて実行します - 後述しますが、Spring BootのConfigurationをします
- JDBCドライバのセットアップはSpring initializeで済ませることができます
pomにDBFlute プラグインとランタイムを追加
ここまでできたら、mvnwでDBFluteエンジンをダウンロードします。
./mvnw -e dbflute:download
これで自分のSpring Bootプロジェクトの配下にmydbfluteという名前のディレクトリができ、DBFluteエンジンがダウンロードされます。
DBFluteクライアントの作成
引き続き、DBFluteクライアントを作成します。
mvnw -e dbflute:create-client
これで自分のSpring Bootプロジェクトの配下にdbflute_pomで設定した名称
という名前のディレクトリができ、DBFluteに必要な設定類が生成されています。
DBFluteプロパティの基本設定
ひとまずは最低限2つを設定します。それ以外は必要に応じて修正すれば良いので、この記事では扱いません。
- basicInfoMap.dfprop
- databaseInfoMap.dfprop
basicInfoMap.dfprop
標準でDIコンテナにSpringを利用するようになっていますので、Spring Bootを利用する場合修正不要です。
databaseInfoMap.dfprop
利用したいデータベースに応じて書き換えます。
クラスの自動生成
DDL, DMLの類を用意して自動生成します
Spring BootのDataSourceを設定する
基本的にはdatabaseInfoMap.dfpropに追加した接続情報と同じになると思いますが、アプリケーション動作専用のデータベースユーザに変更することがあるかもしれません。
セットアップ後
コードとテストを書いていきます。
Spring Boot 3.1/JDK 17/DBFlute 1.2.6でexampleを作成しています。
一部未完成ですが、参考にどうぞ。
https://github.com/dbflute-example/dbflute-example-on-springboot
導入後に必要な運用
DBFluteのバージョンアップ
manage.sh 94
を起動して、出力されるメッセージを参照してください。
スキーマの変更やデータの投入
ReplaceSchemaを利用できます。
課題
DBFluteとSpring Bootで冗長化複数DBを実現したい
2023/12時点でdbflute-example-on-springbootには未実装ですが、SpringのAbstractRoutingDataSourceを利用できます。
スキーママイグレーションでDBFluteのReplaceSchemaを使うか
DBFluteにもReplaceSchemaがあります。一方Spring BootでもFlywayとLiquibaseがサポートされています。
DBFluteをORマッパとしてのみ使い、flywayでスキーママイグレーションすることも可能です。Spring Bootの機能をどこまで使うか、DBFluteの機能をどこまで使うか決めておくと実装運用しやすいでしょう。
DBFluteとTestcontainersをどう組みあわせて使うか
作者が試せていません。試した方いらしたらぜひ教えてください。
最後に
この記事への質問などは作者までお願いします。
DBFluteへのご意見、ご感想、質問などありましたら、SlackやGoogle Groupで質問するとコミュニティで答えられます。
最後まで読んでいただきありがとうございます。