1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaAdvent Calendar 2023

Day 17

Spring Boot のデータアクセスにDBFluteを使う

Last updated at Posted at 2023-12-16

目的

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プロジェクトを作成します。

ポイント

  1. DBFluteのセットアップがMavenベースなのでMavenを選択。Gradleを使いたい場合、実行時はGradleを使うことも可能です
  2. コンパイルと実行に必要な、JDBC と JDBCドライバも選択しておきます

DBFluteをセットアップする

https://dbflute.seasar.org/ja/environment/setup/maven.html の通りです。

Spring Bootでは下記を追加で行います。

  1. Spring BootはMaven Wrapperを利用しているので、DBFlute公式ドキュメントで mvnmvnw に読み替えて実行します
  2. 後述しますが、Spring BootのConfigurationをします
  3. 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つを設定します。それ以外は必要に応じて修正すれば良いので、この記事では扱いません。

  1. basicInfoMap.dfprop
  2. 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で質問するとコミュニティで答えられます。

最後まで読んでいただきありがとうございます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?