sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo establecer la zona horaria en UTC en Play Framework 2.0 tanto para producción como para pruebas?

Esto fue más fácil de lo que esperábamos.

Primero, en application.conf , configure la URL de JDBC con los parámetros como se describe en otra pregunta de 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"

Segundo, en Build.scala , establezca la propiedad del sistema Java y el valor predeterminado:

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

Estos dos cambios juntos manejarán ambas pruebas (play test ) y desarrollo (play start ) modos.

Para producción (play dist ), todavía se debe establecer la propiedad antes del lanzamiento. Por ejemplo, por:

  1. Editando el start generado script para agregar export _JAVA_OPTIONS=-Duser.timezone=GMT
  2. Invocar el start secuencia de comandos con -Duser.timezone=GMT
  3. Lanzamiento dentro de una JVM existente después de llamar a System.setProperty("user.timezone", "GMT")