Mysql
 sql >> Database >  >> RDS >> Mysql

Come impostare il fuso orario su UTC in Play Framework 2.0 sia per la produzione che per i test?

È stato più facile di quanto ci aspettassimo.

Innanzitutto, in application.conf , configura l'URL JDBC con i parametri come descritto in un'altra domanda StackOverflow :

# 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"

Secondo, in Build.scala , imposta la proprietà del sistema Java e quella predefinita:

// 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"))

Queste due modifiche insieme gestiranno entrambi i test (play test ) e sviluppo (play start ) modalità.

Per la produzione (play dist ), è comunque necessario impostare la proprietà prima del lancio. Ad esempio, da:

  1. Modifica dell'start generato script per aggiungere export _JAVA_OPTIONS=-Duser.timezone=GMT
  2. Invocare l'start script con -Duser.timezone=GMT
  3. Avvio all'interno di una JVM esistente dopo aver chiamato System.setProperty("user.timezone", "GMT")