我们希望Play Framework 2.0 Scala应用程序能够在应用服务器和MySQL数据库服务器中处理UTC中的所有日期和时间信息。
诀窍是:
这样做有标准的最佳做法吗?我们希望测试以UTC格式运行,而不必在所有命令行上传递-Duser.timezone=GMT
。使用play start
启动服务器同上。
答案 0 :(得分:7)
这比我们预期的要容易。
首先,在application.conf
中,使用参数as described on another StackOverflow question配置JDBC URL:
# 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"
其次,在Build.scala
中,设置Java系统属性和默认值:
// 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"))
这两项更改将同时处理测试(play test
)和开发(play start
)模式。
对于生产(play dist
),必须在启动前设置该属性。例如,通过:
start
脚本以添加export _JAVA_OPTIONS=-Duser.timezone=GMT
start
-Duser.timezone=GMT
脚本
System.setProperty("user.timezone", "GMT")