Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como definir o fuso horário para UTC no Play Framework 2.0 para produção e testes?


Isso foi mais fácil do que esperávamos.

Primeiro, em application.conf , configure o URL JDBC com os parâmetros conforme descrito em outra pergunta do 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, em Build.scala , defina a propriedade do sistema Java e o padrão:
// 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"))

Essas duas alterações juntas lidarão com teste (play test ) e desenvolvimento (play start ) modos.

Para produção (play dist ), ainda é preciso definir a propriedade antes do lançamento. Por exemplo, por:
  1. Editando o start gerado script para adicionar export _JAVA_OPTIONS=-Duser.timezone=GMT
  2. Invocando o start script com -Duser.timezone=GMT
  3. Iniciando em uma JVM existente após chamar System.setProperty("user.timezone", "GMT")