mysql-jdbc-timezone-spring-boot
Spring Boot設定を使用してMySQL JDBCタイムゾーンを設定する
1. 概要
時々、MySQLに日付を保存するときに、データベースの日付がシステムまたはJVMとは異なることに気付きます。
また、別のタイムゾーンでアプリを実行する必要がある場合もあります。
このチュートリアルでは、Spring Boot設定を使用してMySQLのタイムゾーンを変更するさまざまな方法を紹介します*。
2. URLパラメータとしてのタイムゾーン
タイムゾーンを指定する1つの方法は、接続URL文字列にパラメーターとして含めることです。
デフォルトでは、MySQLは__useLegacyDatetimeCode = trueを使用します。 __タイムゾーンを選択するには、このプロパティを_false_に変更する必要があります。 そしてもちろん、プロパティ_serverTimezone_を追加してタイムゾーンを指定します:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useLegacyDatetimeCode=false
username: root
password:
もちろん、代わりにlink:/spring-boot-configure-data-source-programmatic[Java構成でデータソースを構成]することもできます。
このプロパティやその他の詳細については、https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html [MySQL公式ドキュメント]にあります。
3. スプリングブートプロパティ
または、_serverTimezone_ URLパラメーターでタイムゾーンを示す代わりに、Spring Boot構成で_time_zone_プロパティを指定できます。
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
またはYAMLの場合:
spring:
jpa:
properties:
hibernate:
jdbc:
time_zone: UTC
ただし、**以前に見たように、** URLに_useLegacyDatetimeCode = false_を追加する必要がまだあります**。
4. JVMデフォルトタイムゾーン
そしてもちろん、Javaのデフォルトのタイムゾーンを更新できます。
繰り返しますが、以前のように** URLに_useLegacyDatetimeCode = false_を追加します**。 そして、単純なメソッドを追加するだけです。
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
しかし、*このソリューションは、アプリケーション全体にわたるため、他の問題を生成する可能性があります。*アプリケーションの他の部分は、別のタイムゾーンを必要とする可能性があります。 たとえば、異なるデータベースに接続する必要がある場合があり、何らかの理由で、異なるタイムゾーンに日付を保存する必要があります。
5. 結論
このチュートリアルでは、SpringでMySQL JDBCタイムゾーンを設定するいくつかの異なる方法を見ました。 URLパラメータ、プロパティ、およびJVMのデフォルトのタイムゾーンを変更することでそれを行いました。
いつものように、サンプルの完全なセットはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-mysql[over on GitHub]です。