かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その10 )( Tomcat connection Pool → HikariCP に変更する )

概要

記事一覧はこちらです。

Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その9 )( gradle-errorprone-plugin を 0.0.16 → 0.6 にバージョンアップ。。。しようと思いましたが止めました ) の続きです。

参照したサイト・書籍

目次

  1. build.gradle を変更する
  2. application.properties を変更する
  3. logback-spring.xml を変更する
  4. dataSource Bean の実装を変更する
  5. clean タスク → Rebuild Project → build タスクを実行する
  6. 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" &amp;&amp; "${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 が出力されました。

f:id:ksby:20181010224407p:plain

JMX への登録状況を確認する

まずは IntelliJ IDEA から spring.profiles.acive=develop で起動した後、jconsole を起動して確認します。

f:id:ksby:20181010224802p:plain f:id:ksby:20181010225209p:plain f:id:ksby:20181010225240p:plain

次に ksbysample-webapp-lending-2.0.4-RELEASE.jar を作成して、D:\webapps\ksbysample-webapp-lending\bat\webapp_startup.bat から spring.profiles.acive=product で起動した後、jconsole を起動して確認します。

f:id:ksby:20181010225609p:plain f:id:ksby:20181010225740p:plain f:id:ksby:20181010225821p:plain

表示が違いますが、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 で見てみます。

f:id:ksby:20181010234216p:plain

今度は spring.profiles.acive=product で起動した時と同じ表示になりました。

D:\webapps\ksbysample-webapp-lending\bat\webapp_startup.bat から spring.profiles.acive=product で起動した時に本当にコネクションプーリングをしているのかを PostgreSQL の管理ツール pgAdmin4 で見てみると、ログイン画面からログインした直後に 10 セッション接続していることが確認できました。

f:id:ksby:20181011003013p:plain

また、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
初版発行。