Spring Boot2.7で日記投稿ウェブアプリ入門の第2回です。DBの接続設定とSQLログ出力の設定をします。DBはH2を使用し、SQLログ出力はLog4jdbc-log4j2を使用します。Spring Bootの初心者・入門者の方は、参考にしてみてください。
※ 本ページはプロモーションが含まれています。
前回はSpring Bootで日記投稿ウェブアプリを開発するスタートとして、Eclipseでプロジェクト作成までやりました。
(第1回) Spring Boot2で日記ウェブアプリの開発入門スタート
今回は、ウェブアプリの開発に入る前に、SQLロギングの設定とDBの接続設定をやっていきます。DBはH2を使用します。また、SQLログ出力にはLog4jdbc-log4j2を使用します。
◾️動作環境やバージョンは以下の通りです。
OS:macOS Big Sur(バージョン11.7.1)
開発環境:Eclipse(Pleiades All in One、4.16(2020-06)、Java Full Edition版)
Spring Bootバージョン:2.7.5
->2.4でも確認済み
Java:11
データベース:H2
今回作成するファイルを先に書いておきます。
今回新規に作成するファイルは「log4jdbc.log4j2.properties」の1つで、編集するファイルは「pom.xml」「application.properties」の2つです。
DBを使用するウェブアプリ(ウェブサイト)やWeb APIを開発する場合、プログラマにとってアプリ内で実行されるSQLのログは重要な情報です。SQLログを見れれば開発効率が良くなりますし、開発速度もアップします。仕事ではSQLログがないとデバッグすらまともにできないので必須だと思います。
と言う事でまずは、SQLログの出力設定をやります。目標はEclipseのコンソールビューにSQLログが出力される事です。
今回のSpring BootアプリのSQLロギングにはLog4jdbc-log4j2を使用します。Log4jdbc-log4j2を使用する事で、JDBCドライバ経由のSQLログを出力可能になります。
Log4jdbc-log4j2のSQLロギングの設定に関しては別ページでも説明していますので、そちらも参考にしてみてください。
(H2データベース入門 第5回) log4jdbc-log4j2でSQLログの出力設定【 Spring Boot2】
Log4jdbc-log4j2を使用するために、pom.xmlファイルの<dependencies>タグの下に<dependency>タグを追加します。
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
次に、src/main/resourcesディレクトリ下にlog4jdbc.log4j2.propertiesファイルを新規作成して、設定コードを1行書きます。
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
次は、src/main/resourcesディレクトリにあるapplication.propertiesファイルを編集します。
#DB接続
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:h2:mem:diarydb
#SQLロギング出力の設定
logging.level.jdbc.sqlonly=info
logging.level.jdbc.resultsettable=info
logging.level.jdbc.connection=off
logging.level.jdbc.sqltiming=off
logging.level.jdbc.audit=off
logging.level.jdbc.resultset=off
最初の2行はDB接続の設定です。
"spring.datasource.driver-class-name"は、DB接続のためのドライバクラスを指定しています。
H2のドライバクラスは他に"org.h2.Driver"がありますが、Log4jdbc-log4j2を使用する場合は"net.sf.log4jdbc.sql.jdbcapi.DriverSpy"を指定します。
"spring.datasource.url"は、DBの接続URLです。
"jdbc:log4jdbc:h2:mem:diarydb"のうち、"h2"はデータベースがH2であることを意味し、"mem"はH2をメモリベースで使うことを意味しています。"diarydb"は適当なデータベース名です。
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
◾️H2のデータの保存先
H2データベースはデータの保存先として、メモリとファイルがあります。メモリはアプリを起動するたびにデータは初期化されます。一方、データを保存して永続化したい場合はファイルベースで使用します。
今回開発しているWebアプリは起動時にデータが初期化しても特に問題ないので、メモリベースでやります。
H2をファイルベースで利用する時の方法や設定については別ページで説明していますので、そちらを参考にしてください。
H2のデータ保存先をファイルに設定、データの永続化【Spring Boot2】
◾️DBのユーザ名とパスワード
今回、DBに接続するユーザ名とパスワードは無しにします。もし指定したい場合、下のようにユーザ名は"spring.datasource.username"、パスワードは"spring.datasource.password"で指定します。
spring.datasource.username=hogeuser
spring.datasource.password=pass
そして、application.propertiesファイルの後半の"logging.level.jdbc.****"の6行は、SQLログ出力の設定です。
これを書かなくてもSQLログは出力されますが、必要のないDB接続などのログも一緒に出力されて、コンソールビューがDB関連のログで汚染されてしまうため、SQLログ(logging.level.jdbc.sqlonly)とSQLの取得結果(logging.level.jdbc.resultsettable)のみを"info"にして出力するようにしています。
それぞれの項目の意味については以下に示しておきます。
logging.level.jdbc.sqlonly | 実行するSQLログを出力。info,debug,traceで出力してくれる。 |
logging.level.jdbc.resultsettable | select SQLのレコード取得結果をテーブル形式で出力。 |
logging.level.jdbc.connection | JDBCコネクション(オープン・クローズ)ログを出力。 |
logging.level.jdbc.sqltiming | 各SQLの実行時間を出力。処理に時間がかかる場合、どのSQLで時間がかかっているかがわかる。info,debug,traceで出力してくれる。 |
logging.level.jdbc.audit | ResultSet(SQL取得結果)以外の全てのJDBC呼び出しログを出力。このログを出力すると膨大になるので、通常はoffにしてJDBC周りのトラブルシューティング時はdebug,infoにすべき。 |
logging.level.jdbc.resultset | ResultSet(SQL取得結果)ログを出力。SQL取得結果レコードを1フィールドずつ出力するので、これもログが膨大になる。 |
SQLログだけで十分でSQLの取得結果の出力は必要ないのなら、"logging.level.jdbc.resultsettable=off"で良いと思います。
以上今回は、DB(H2)の接続設定とSQLログ出力の設定をしました。これでアプリを起動すればH2データベースに接続して、SQLログが出力されるようになっているはずですが、現状はまだDBのテーブルすら作っていないので出力されるSQLログはありません。
ですので次回は、日記ウェブアプリで使用するテーブル設計、エンティティクラスの作成、初期データの作成をやっていきます。そして、それができたらSQLログの確認もします。
(第3回) DBのテーブル設計、エンティティクラスと初期データの作成【Spring Boot2で日記投稿ウェブアプリ】
Spring Bootの日記投稿ウェブアプリ開発入門トップ
また、本講座のSpring Bootの日記Webアプリ開発では、DBにH2を使用して説明していきますが、MySQLを使用する設定方法についても別ページで説明しています。Spring BootでMySQLを使いたい方は参考にしてください。
(*Spring Boot + H2で日記ウェブアプリを開発した後に、簡単な設定変更でDBをH2からMySQLへ切り替える方法について説明しています。)
(第12回) DBをMySQLに変更する【Spring Boot2で日記ウェブアプリ】