我们希望我们的 Play Framework 2.0 Scala 应用程序能够以 UTC 格式处理应用程序服务器和 MySQL 数据库服务器中的所有日期和时间信息。
诀窍是:
- 无需改变部署环境
- 无需更改 CI(测试)环境
- 不改变本地(开发)环境
是否有标准的最佳实践来做到这一点?我们希望测试在 UTC 中运行,而不必传递-Duser.timezone=GMT
所有命令行。使用play start
.
我们希望我们的 Play Framework 2.0 Scala 应用程序能够以 UTC 格式处理应用程序服务器和 MySQL 数据库服务器中的所有日期和时间信息。
诀窍是:
是否有标准的最佳实践来做到这一点?我们希望测试在 UTC 中运行,而不必传递-Duser.timezone=GMT
所有命令行。使用play start
.
这比我们预期的要容易。
首先,在 中,使用另一个 StackOverflow 问题中描述application.conf
的参数配置 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")