Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment définir le fuseau horaire sur UTC dans Play Framework 2.0 pour la production et les tests ?

C'était plus facile que prévu.

D'abord, dans application.conf , configurez l'URL JDBC avec les paramètres comme décrit sur une autre question 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"

Deuxièmement, dans Build.scala , définissez la propriété système Java et la valeur par défaut :

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

Ces deux changements ensemble géreront à la fois le test (play test ) et développement (play start ) modes.

Pour la production (play dist ), il faut encore définir la propriété avant le lancement. Par exemple, par :

  1. Modification du start généré script pour ajouter export _JAVA_OPTIONS=-Duser.timezone=GMT
  2. Invoquer le start script avec -Duser.timezone=GMT
  3. Lancement dans une JVM existante après avoir appelé System.setProperty("user.timezone", "GMT")