H2データベースを使うための設定まとめ
H2データベースを開発環境で使うための設定
H2データベースとは
H2データベースはJavaで書かれた軽量なデータベースで、インメモリDB(アプリ終了でデータ消える)/ファイルDB(永続化)を選択可能で動作します。簡単にセットアップできるため、開発・テスト向けに多くのプロジェクトで利用されています。
今回はそんなH2データベースの設定の仕方をまとめます。
メモリ上にDBを作成するとは
H2の jdbc:h2:mem:~ は、DBをディスクではなくメモリ(RAM)上に作ります。
メリット
- 非常に高速
- セットアップが簡単
- テストや検証で「毎回まっさらなDB」を作りやすい
デメリット
- アプリ停止・再起動でデータが消える(メモリなので保持されない)
利用シーン
- 開発中の軽い動作確認
- 単体テスト / 結合テストのDBとしての利用
H2データベースの依存関係を追加
Mavenの場合の依存関係の追加
まず、Spring BootプロジェクトにH2データベースを追加します。Eclipseでプロジェクトを開き、pom.xmlファイルを開きます。以下の依存関係を追加します。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
この依存関係を追加することで、プロジェクトにH2データベースが組み込まれます。
Gradleの場合の依存関係の追加
Gradleの場合、H2データベースの依存関係を追加するには、build.gradleファイルに以下の設定を追加します。
dependencies {
implementation 'com.h2database:h2'
}
- implementation 'com.h2database:h2': これがH2データベースの依存関係を追加するための設定です。
implementation: Gradleに対してこの依存関係が実行時に必要であることを伝えます。'com.h2database:h2': H2データベースのグループIDとアーティファクトIDを示しています。
build.gradleファイルにこの依存関係を追加した後、Gradleをリフレッシュすることで、H2データベースがプロジェクトに組み込まれます。
H2コンソールの有効化
H2データベースのWebコンソールを使用すると、データベースの内容を簡単に確認できます。application.propertiesに以下の設定を追加して、H2コンソールを有効化します。
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
これで、H2コンソールにアクセスできるようになります。
H2コンソールへのアクセス
プロジェクトを実行し、ブラウザで http://localhost:8080/h2-console にアクセスします。
JDBC URLに jdbc:h2:mem:testdb と入力し、Connectボタンをクリックします。これで、H2データベースのコンソールにアクセスできます。
application-test.yml と application.properties の使い分け
H2の設定を「どこに書くか」は、H2を使いたい範囲で決めます。
application-test.yml に書く場合
- テスト実行時だけH2に切り替えられるので安全で一般的。
- 通常起動(開発)はMySQLなど、テストはH2という分離ができます。
例:開発では本番相当DBで確認しつつ、テストは高速に回したい場合。
application.properties に書く場合
- 全環境(通常起動も含む)がH2になります。
- 意図的に「常にH2で動かす」ならOK。
注意点:通常起動もH2になるため、本番DB(MySQL/PostgreSQLなど)との差(型・制約・SQL方言)を見落としやすいです。
application-test.yml でH2を使う設定(テスト時だけ切り替え)
ファイルの配置
テスト用の設定ファイルを以下に作成します。
src/test/resources/application-test.yml
application-test.yml の例
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
properties:
hibernate:
format_sql: true
h2:
console:
enabled: true
path: /h2-console
この設定の意図
- DB_CLOSE_DELAY=-1:テスト中に接続が閉じてもDBが消えにくくするため
- ddl-auto: create-drop:テスト開始で作って、終了で消す(テスト向け)
- show-sql / format_sql:SQL確認用(必要なければ削除してOK)
- console:テスト中も確認したい場合に有効(不要なら無効でOK)
テストで application-test.yml を有効化する
テストクラスに @ActiveProfiles("test") を付けます。
@ActiveProfiles("test")
class SampleTest {
}
これでテスト実行時に application-test.yml が読み込まれ、H2へ切り替わります。
application.propertiesに書く場合
application.propertiesにデータベース接続の設定を追加します。
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
この設定では、メモリ上にtestdbという名前のデータベースを作成し、H2ドライバを使用して接続します。
設定項目の説明
以下の設定項目について、それぞれの役割を説明します。
- spring.datasource.url=jdbc:h2:mem:testdb: データベースに接続するためのURLです。
memはメモリ内データベースを意味し、testdbはデータベースの名前です。 - spring.datasource.driverClassName=org.h2.Driver: データベースに接続するためのドライバクラスです。
- spring.datasource.username=sa: データベースに接続する際のユーザー名です。
- spring.datasource.password=: データベースに接続する際のパスワードです。今回は空欄で、デフォルトのユーザー設定を使用します。
- spring.jpa.database-platform=org.hibernate.dialect.H2Dialect: JPAを使う際に、H2データベース用の方言(ダイアレクト)を指定します。
テーブルの作成とデータの挿入
@EntityクラスからDBの自動生成
@Entityアノテーションを使ってクラスを定義すると、Spring Bootがデータベースに対応するテーブルを自動的に作成します。
これは、Spring Bootのspring.jpa.hibernate.ddl-autoプロパティによって制御されます。このプロパティは、データベースのテーブルを自動的に生成したり、既存のテーブルを更新したりするための設定です。
例えば、application.propertiesに以下のように設定すると、アプリケーションの起動時にデータベースのテーブルが自動で更新されます。
spring.jpa.hibernate.ddl-auto=update
ddl-autoの値には他にもcreate、create-drop、validateなどがあり、データベースのテーブルをどのように扱うかを制御します。
コンソールからDB作成
コンソールからSQLを使ってテーブルを作成し、データを挿入してみましょう。例えば、以下のSQLを実行してテーブルを作成します。
CREATE TABLE sample_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255)
);
次に、データを挿入します。
INSERT INTO sample_table (name) VALUES ('Test Data');
SELECT文でデータが挿入されているか確認しましょう。
SELECT * FROM sample_table;
ログにSQLを表示する
下記設定をapplication.propertiesなどの設定ファイルに追記する。
spring.jpa.show-sql=を記述する
役割: JPA が生成する SQL クエリをコンソールに表示するかどうかを制御します。
- true: SQLクエリをコンソールに表示します。
- false: SQLクエリをコンソールに表示しません(デフォルト)。
用途: 開発中に実行されるSQLを確認するために利用されます。
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=を記述する
役割: Hibernate が生成する SQL クエリを整形(インデントや改行の追加)して表示します。
- true: 整形されたSQLクエリを出力します。
- false: 整形せず、そのまま出力します(デフォルト)。
用途: SQLの可読性を向上させ、開発者が理解しやすい形で表示するために使います。
注意: この設定は spring.jpa.show-sql=true と一緒に使う必要があります。
spring.jpa.properties.hibernate.format_sql=true
まとめ
これで、H2データベースを開発環境で使用するための設定が完了しました。H2を使うことで、開発中のデータベース操作が容易になり、素早くテストを行うことができます。

コメント
0 件のコメント :
コメントを投稿