Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その10 )( Tomcat connection Pool → HikariCP に変更する )
概要
記事一覧はこちらです。
- 今回の手順で確認できるのは以下の内容です。
- Spring Boot 2.0 からデフォルトのコネクションプーリング用ライブラリが Tomcat connection pool → HikariCP に変わりましたので、HikariCP に変更します。
- Spring Boot + npm + Geb で入力フォームを作ってテストする ( その75 )( コネクションプーリング用ライブラリを Tomcat connection pool → HikariCP に切り替える ) を参考に進めます。
参照したサイト・書籍
目次
- build.gradle を変更する
- application.properties を変更する
- logback-spring.xml を変更する
- dataSource Bean の実装を変更する
- clean タスク → Rebuild Project → build タスクを実行する
- JMX への登録状況を確認する
手順
build.gradle を変更する
dependencies block から implementation("org.apache.tomcat:tomcat-jdbc")
を削除します。
変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
application.properties を変更する
src/main/resources/application.properties を以下のように変更します。
spring.datasource.hikari.jdbc-url=jdbc:postgresql://localhost/ksbylending spring.datasource.hikari.username=ksbylending_user spring.datasource.hikari.password=xxxxxxxx spring.datasource.hikari.driver-class-name=org.postgresql.Driver spring.datasource.hikari.leak-detection-threshold=5000 spring.datasource.hikari.register-mbeans=true
src/main/resources/application-product.properties から以下の4行を削除します。
spring.datasource.tomcat.initialSize=10
spring.datasource.tomcat.maxActive=100
spring.datasource.tomcat.maxIdle=100
spring.datasource.tomcat.minIdle=10
logback-spring.xml を変更する
Tomcat connection pool の SlowQueryReport interceptor がなくなりましたので、<if condition='"${spring.profiles.active}" == "product" && "${slowquery.logging.file}" != ""'> ... </if>
の設定を削除します。
dataSource Bean の実装を変更する
src/main/java/ksbysample/webapp/lending/config/ApplicationConfig.java の以下の点を変更します。
@Bean @ConfigurationProperties("spring.datasource.hikari") public DataSource dataSource() { return DataSourceBuilder.create() .type(HikariDataSource.class) .build(); }
@ConfigurationProperties("spring.datasource.tomcat")
→@ConfigurationProperties("spring.datasource.hikari")
に変更します。.type(org.apache.tomcat.jdbc.pool.DataSource.class)
→.type(HikariDataSource.class)
に変更します。
clean タスク → Rebuild Project → build タスクを実行する
clean タスク → Rebuild Project → build タスクを実行すると BUILD SUCCESSFUL が出力されました。
JMX への登録状況を確認する
まずは IntelliJ IDEA から spring.profiles.acive=develop で起動した後、jconsole を起動して確認します。
次に ksbysample-webapp-lending-2.0.4-RELEASE.jar を作成して、D:\webapps\ksbysample-webapp-lending\bat\webapp_startup.bat から spring.profiles.acive=product で起動した後、jconsole を起動して確認します。
表示が違いますが、spring.profiles.acive=develop の時は implementation("com.integralblue:log4jdbc-spring-boot-starter:1.0.2")
が適用されているためと思われます。src/main/resources/application.properties に spring.autoconfigure.exclude=com.integralblue.log4jdbc.spring.Log4jdbcAutoConfiguration
を追加してから jconsole で見てみます。
今度は spring.profiles.acive=product で起動した時と同じ表示になりました。
D:\webapps\ksbysample-webapp-lending\bat\webapp_startup.bat から spring.profiles.acive=product で起動した時に本当にコネクションプーリングをしているのかを PostgreSQL の管理ツール pgAdmin4 で見てみると、ログイン画面からログインした直後に 10 セッション接続していることが確認できました。
また、Spring Boot + npm + Geb で入力フォームを作ってテストする ( その75 )( コネクションプーリング用ライブラリを Tomcat connection pool → HikariCP に切り替える ) の時は @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
を付けないと jar から起動した時に org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [HikariDataSource (HikariPool-1)] with key 'dataSource'; ...
の例外が発生しましたが、今回は付けなくても例外は発生しませんでした。例外が発生する/しないの違いがよく分かりませんでした。。。
履歴
2018/10/11
初版発行。