2021/7/7時点での情報です。
はじめに
docker-hubのmysqlをローカルで使用して結合テストしようとしてハマりました。
環境
■ Spring Boot
Windows10
Spring Boot v2.3.5.RELEASE
mysql-connector-java 8.0.22
■MySQL
ubuntu 20.04
docker v20.10.7
docker-hub MySQL 8.0.25
結論
こうすれば繋がりました。
# local docker setting
datasource:
url: jdbc:mysql://localhost:3306/test_todo?useLegacyDatetimeCode=false&serverTimezone=Asia/Tokyo
driverClassName: com.mysql.cj.jdbc.Driver
username: <ユーザー名>
password: <パスワード>
TimeZoneの設定が必要だったみたいです。
確認ポイント
mysql-connector-java のバージョンによって
- Spring Bootとの相性
- Spring Bootの設定ファイル(application.yml)の書き方
が違います。
- Spring Boot(gradle)との相性
gradleを使用してライブラリを管理していると
mysql-connector-java 8.0.22がデフォルトでした。
mysql-connector-java 8.0.25に変えると
java.time.LocalDateTime cannot be cast to java.sql.Timestamp
のエラーが出てSpring Bootが起動できませんでした。
(コンパイルは通っていたのでmysql-connector-java 8.0.25との相性に問題があるのでは...)
- Spring Bootの設定ファイル(application.yml)の書き方
mysql-connector-javaのバージョンが
8.0.22以前はTimeZoneの設定をapplication.ymlに記載する必要が有りますが、
8.0.23以降はTimeZoneの設定をapplication.ymlに記載する必要が無いです。
mysql-connector-java 8.0.23