我使用 -Duser.timezone=UTC
运行 Tomcat。然而,Quartz scheduler 2.2.1 似乎在欧洲/布拉格运行,这是我的操作系统时区。
有没有办法在自定义时区运行 Quartz 或确定 Quartz 使用的时区? 如果没有,有没有办法以编程方式确定操作系统时区?
最佳答案
默认情况下,Quartz 将使用默认的系统区域设置和时区,并且它不会被编程为获取您提供的应用程序的属性 user.timezone。还请记住,这仅适用于 CronTrigger 而不是 SimpleTrigger。
例如,如果您使用的是 Spring:
<bean id="timeZone" class="java.util.TimeZone" factory-method="getTimeZone">
<constructor-arg value="GMT" />
</bean>
<bean id="yourTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="yourJob" />
<property name="cronExpression" value="0 0 0/1 * * ?" />
<property name="timeZone" ref="timeZone" />
</bean>
如果您使用的是纯 java:
Trigger yourTrigger = TriggerBuilder
.newTrigger()
.withIdentity("TRIGGER-ID", "TRIGGER-GROUP")
.withSchedule(CronScheduleBuilder
.cronSchedule("0 0 0/1 * * ?")
.inTimeZone(TimeZone.getTimeZone("GMT")))
).build();
关于Java Quartz 默认时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19545181/