Wie Sie angeben, UTC-Zeitzone für Spring-Boot-JPA-Timestamp

Umgebung

  • Spring-Boot-Starter-Data-JPA 1.4.2
  • Eclipselink 2.5.0
  • Postgresql 9.4.1211.jre7

Problem

Ich bin Aufbau einer Spring-Boot-microservice, dass die Aktien einer Postgresql-Datenbank mit einem anderen Dienst. Die Datenbank wird initialisiert extern (außerhalb unserer Kontrolle) und die datetime-Spalte-Typ verwendet, durch die der andere Dienst ist Zeitstempel ohne Zeitzone. Also, da möchte ich alle Daten auf die db haben den gleichen Typ, mit diesem Typ ist eine Voraussetzung für meine JPA-Entität stammt.

Den Weg, den ich anzeigen auf meiner JPA-entity-Objekte ist wie folgt:

@Column(name = "some_date", nullable = false)
private Timestamp someDate;

Das problem ist, dass wenn ich einen Timestamp wie folgt:

new java.sql.Timestamp(System.currentTimeMillis())

und ich schaue auf die Datenbank, die den timestamp enthält meine lokale Zeitzone Datum Zeit, aber ich möchte, um es zu speichern in UTC. Dies ist, weil mein Standard-Zeitzone ist "Europe/Brussels" und JPA/JDBC wandelt meine java.sql.Timestamp Objekt in meiner Zeitzone, bevor es in die Datenbank.

Fand nicht die ideale Lösung

  • TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC")); hat die Wirkung, die ich erreichen möchte, aber es ist nicht geeignet, da es nicht spezifisch zu meinem service. I. e. es wird Auswirkungen auf die gesamte JVM oder der aktuelle thread, plus Kinder.
  • Starten der Anwendung mit -Duser.timezone=GMT scheint auch die Arbeit zu tun für eine einzelne Instanz einer JVM ausgeführt. Daher eine bessere Lösung als die vorherigen.

Aber gibt es eine Möglichkeit zum festlegen der Zeitzone für die JPA/datasource/spring-boot-Konfiguration?

Wie Sie "Blick in die Datenbank"? Vielleicht ist es nur PostgreSQL Anpassung der Zeitstempel zu Ihrer session-Zeitzone? Siehe Antwort.
Vielen Dank für die Beantwortung @Adam, ich habe gerade SELECT * FROM my_table. Nach der Antwort, die Sie verknüpften, "wenn Sie später Anzeige, timestamp, Sie bekommen zurück, was Sie eingegeben haben buchstäblich". Wenn ich SELECT my_timestamp AT TIME ZONE 'UTC' AT TIME ZONE 'UTC' FROM my_table sehe ich das gleiche Ergebnis, was Sinn macht. Wenn man bedenkt, dass, würde ich davon ausgehen, dass es nicht PostgreSQL einstellen der Zeitzone die Einstellung scheint zu passieren, bevor der Wert wird in die db auf der Java-Seite.

InformationsquelleAutor oizulain | 2017-01-12

Schreibe einen Kommentar