Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie wird die Zeitzone in Play Framework 2.0 sowohl für die Produktion als auch für Tests auf UTC eingestellt?

Das war einfacher, als wir erwartet hatten.

Zuerst in application.conf , konfigurieren Sie die JDBC-URL mit den Parametern wie in einer anderen StackOverflow-Frage beschrieben :

# Set MySQL Connector/J to use UTC server connection and time conversions
#   see https://stackoverflow.com/questions/10488529/gettimestamp-does-timezone-converstion-twice-in-mysql-jdbc-connector
db.default.url="jdbc:mysql://localhost/database?useGmtMillisForDatetimes=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useTimezone=true&serverTimezone=UTC"

Zweitens in Build.scala , legen Sie die Java-Systemeigenschaft und den Standard fest:

// Setting this property here forces the JVM to run in UTC time, 
// both for test (`play test`) and development (`play start`) modes, 
// but not for production (`play dist`).
System.setProperty("user.timezone", "GMT")
TimeZone.setDefault(TimeZone.getTimeZone("GMT"))

Diese beiden Änderungen zusammen handhaben beide Tests (play test ) und Entwicklung (play start ) Modi.

Für die Produktion (play dist ), muss man die Eigenschaft noch vor dem Start setzen. Zum Beispiel durch:

  1. Bearbeiten des generierten start Skript zum Hinzufügen von export _JAVA_OPTIONS=-Duser.timezone=GMT
  2. Aufruf von start Skript mit -Duser.timezone=GMT
  3. Starten innerhalb einer vorhandenen JVM nach Aufruf von System.setProperty("user.timezone", "GMT")