Spring BootでH2DBを組み込みモード(永続化あり)で利用する
Spring BootでH2 Databaseを組み込みモードで使用する方法について。
環境
- Spring Boot: 2.3.3
- H2 Database Engine: 1.4.200
使い方
application.propertiesに設定値を書き込むことで使用できます。
application.propertiesの設定例
spring.datasource.url=jdbc:h2:./test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.sql-script-encoding=UTF-8
spring.h2.console.enabled=true
spring.datasource.initialization-mode=never
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql
設定値の解説
spring.datasource.url
URLの記載例は何パターンかあります。詳しくは参考ページ参照。
./testと指定すると、resourcesフォルダ直下にデータベースファイル(test.mv.db)が作成されます。
spring.datasource.driver-class-name
固定値org.h2.Driverを指定します。
spring.datasource.sql-script-encoding
H2DBは任意のエンコーディングを使用可能です。
今回はUTF-8を使用します。
spring.h2.console.enabled
trueに設定すると、web上でコンソールを開いてデータベースの中身を見ることができます。(デバッグ用)
spring.datasource.initialization-mode
以下の値を設定できます。
- always:常にデータソースを初期化する
- embedded:埋め込みデータソースのみを初期化
- never:初期化しない
このプロパティでは起動するたびに初期化/初期化しないの実質2択しか設定できないので、以下の方法で初期データを投入しつつ他のレコードを永続化するようにしました。
spring.datasource.initialization-mode=alwaysに設定し、一度アプリケーションを起動する。- データベースファイル(上記の例ではtest.mv.db)が作成された事を確認したら、アプリケーションを停止する。
spring.datasource.initialization-mode=neverに設定し、再度アプリケーションを起動する。
Spring Data JPAを使う場合は他のプロパティで対応できるようですが、JPAは使ったことがないので未確認です。