Spring Bootで、JDBC設定にTLSプロトコルの指定が不要になった話

f:id:excite-takayuki-miura:20220411145717p:plain

こんにちは。 エキサイト株式会社の三浦です。

今回は、Spring Bootのアップデートによって、DB設定がちょっと簡単になった話をします。

Spring BootとDB設定

Spring BootでDBと接続したい場合、 application.yml ファイルに以下のように設定します。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/sample_db
    username: sample_user
    password: sample_password
    driver-class-name: com.mysql.cj.jdbc.Driver

基本的にはこれで良いはずなのですが、実は状況次第では、これではDBと接続できないことがありました。

DB設定とTLSバージョン

この「状況」というのは、端的に言えば各種バージョンのことです。

私のときは、以下のバージョンでの開発で発生しました。

- Java 11.0.13
- Spring Boot 2.4.3

原因は、DBとの接続時のTLSバージョンです。

TLS1.2 でないと接続できないにもかかわらず、デフォルトでは TLS1.1 で接続しに行ってしまうため、接続エラーが起きていたのでした。

これを解決するためには、DBのURLに以下のパラメータをつければOKです。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/sample_db?enabledTLSProtocols=TLSv1.2
    username: sample_user
    password: sample_password
    driver-class-name: com.mysql.cj.jdbc.Driver

明示的に指定することで TLS1.2 で接続してくれるようになり、問題がなくなります。

新バージョンでは指定が不要になった

この指定ですが、実は新しいバージョンでは指定が不要になりました!

少なくとも以下のバージョンでは、指定しなくても接続できることを確認しています。

- Java 17.0.2
- Spring Boot 2.6.6

最後に

ちょっとしたことですが、ハマると少し解決までに時間がかかるところだったので、とてもありがたいです。

新しいJava・Spring Bootを最初から使っている人にはあまり関係ないかもですが、現時点でTLSバージョン指定が必要なものを使っている人や、バージョンを上げたがまだTLSバージョン指定を残している人の参考になれば幸いです。