1. 概要

MySQLに日付を保存しているときに、データベースの日付がシステムやJVMとは異なることに気付くことがあります。

また、別のタイムゾーンでアプリを実行する必要がある場合もあります。

このチュートリアルでは、Spring Boot構成を使用してMySQLのタイムゾーンを変更するさまざまな方法を見ていきます。

2. URLパラメータとしてのタイムゾーン

タイムゾーンを指定する1つの方法は、接続URL文字列をパラメーターとして指定することです。

タイムゾーンを選択するには、 connectionTimeZone プロパティを追加して、タイムゾーンを指定する必要があります。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?connectionTimeZone=UTC
    username: root
    password:

もちろん、代わりにJava構成を使用してデータソースを構成することもできます。

このプロパティおよびその他の詳細については、MySQL公式ドキュメントを参照してください。

3. スプリングブートプロパティ

または、 connectionTimeZone URLパラメータでタイムゾーンを指定する代わりに、SpringBoot構成でtime_zoneプロパティを指定できます。

spring.jpa.properties.hibernate.jdbc.time_zone=UTC

またはYAMLを使用する場合:

spring:
  jpa:
    properties:
      hibernate:
        jdbc:
          time_zone: UTC

4. JVMのデフォルトのタイムゾーン

そしてもちろん、Javaのデフォルトのタイムゾーンを更新することもできます。

タイムゾーンを選択するには、URLにプロパティ forceConnectionTimeZoneToSession =trueを追加する必要があります。 次に、簡単なメソッドを追加する必要があります。

@PostConstruct
void started() {
  TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}

しかし、 このソリューションはアプリケーション全体であるため、他の問題が発生する可能性があります。 おそらく、アプリケーションの他の部分には別のタイムゾーンが必要です。 たとえば、さまざまなデータベースに接続する必要があり、何らかの理由で、日付をさまざまなタイムゾーンに保存する必要がある場合があります。

5. 結論

このチュートリアルでは、SpringでMySQLJDBCタイムゾーンを構成するいくつかの異なる方法を見ました。 これは、URLパラメータ、プロパティ、およびJVMのデフォルトのタイムゾーンを変更することで行いました。

いつものように、例の完全なセットはGitHub以上です。