6
9

More than 5 years have passed since last update.

ことりんと一緒 Springもね - 8. リポジトリ層 - 補足:H2 Database

Posted at

概要 / 説明

ことりんと一緒 Springもね - 8. リポジトリ層 では、リポジトリ層を設けて、データの永続化処理を抽象化して外部の永続化領域への操作を透過的に実施できるようにしました。

今回のケースでは、外部の永続化領域はインメモリでアプリケーションに組み込みで動作する H2 Database Engine を利用していました。

この H2 Database Engine には、データベース情報を確認するためのコンソールアプリケーションが組み込まれています。そちらを利用してデータベースの状態確認を行ってみます。

前提 / 環境

ランタイムバージョン

  • Kotlin : 1.3.21
  • SpringBoot : 2.1.1.RELEASE

Spring Dependencies

  • Web
  • JDBC
  • JPA
  • H2
  • Actuator

開発環境

  • OS : Mac
  • IDE : IntelliJ IDEA
  • Build : Gradle

手順 / 解説

application.yml の設定

SpringBoot の application.yml に以下のようにH2データベースが使用できるように構成情報を定義します。

データソース

Springアプリケーションからデータベースに接続するためのデータソース定義を以下のように実施します。

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:app;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE
    username: guest
    password: guest
構成要素 内容
driver-class-name H2DBのドライバーライブラリ
org.h2.Driver
url データベース接続URL(※フォーマットについて後述)
jdbc:h2:mem:app;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE
username データベース接続ユーザ名
password データベース接続パスワード
H2データベース接続URLフォーマット

H2データベースは、インメモリで動作するアプリケーション組み込み型の使用や、リモートサーバとして稼働するサーバモード、またファイルシステムにデータを書き出す動作など様々な動作モードがとれます。それぞれの動作モードに合わせた接続URLフォーマットとなります。

動作モード URLフォーマット サンプル
組み込みモード:インメモリ(プライベート) jdbc:h2:mem: jdbc:h2:mem:
組み込みモード:インメモリ(Named) jdbc:h2:mem:<DB名> jdbc:h2:mem:app
組み込みモード:ローカルファイル jdbc:h2:[file:][<ファイルパス>]<DB名> jdbc:h2:file:/data/sample
インメモリDBのドロップ防止 DB_CLOSE_DELAY=-1 jdbc:h2:mem:app;DB_CLOSE_DELAY=-1
サーバモード:TCP接続 jdbc:h2:tcp://<サーバアドレス>[:<ポート>]/[<ファイルパス>] jdbc:h2:tcp://localhost:8084/data/sample
サーバモード:TLS接続 jdbc:h2:ssl://<サーバアドレス>[:<ポート>]/[<ファイルパス>] jdbc:h2:ssl://localhost/mem:test
VM終了時のDB接続切断 DB_CLOSE_ON_EXIT=TRUE jdbc:h2:mem:app;DB_CLOSE_ON_EXIT=TRUE

H2データベース

H2 データベースのコンソール画面を表示させるには以下の設定を行います。

spring:
  h2:
    console:
      enabled: true

H2 データベースのコンソール画面の表示

アプリケーションを起動した後、H2 データベースコンソール画面にアクセスしてみます。

$ ./gradlew bootRun

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.1.RELEASE)
:
:
:
2019-02-26 16:05:13.358  INFO 7073 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 15 endpoint(s) beneath base path '/admin'
2019-02-26 16:05:13.457  INFO 7073 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-02-26 16:05:13.460  INFO 7073 --- [           main] i.p.s.simple.SimpleApplicationKt         : Started SimpleApplicationKt in 5.577 seconds (JVM running for 5.998)
<==========---> 83% EXECUTING [2m 46s]
> :bootRun
  • http://localhost:[設定したポート番号]/h2-console へアクセスし、H2 データベースの接続ユーザ/パスワードを入力して接続を行います。

h2-console-login.png

H2-console.png

まとめ / 振り返り

SpringBoot と組み合わせて手軽に利用できるH2データベースを操作してみました。
データベースの機能自体に依存しないアプリケーション開発の場面では、インストール作業が不要で、簡単に使えるH2データベースは利用できる場面がいろいろとあるのではないでしょうか。

今回のソース

6
9
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
6
9