项目中在Spring中集成了Quartz,配置定时任务每日凌晨执行,但是到了八点多才执行,经过排查是时区问题造成的。
- 一种解决办法是在JVM启动参数中增加 --Duser.timezone=GMT+08
- 另一种办法是在配置文件中增加timeZone的配置 JVM参数的方式获取一个TimeZone,使用java.util.TimeZone.getTimeZone(String ID)获取指定的TimeZone,ID有两种形式,一种为完整名称例如“America/Los_Angeles”、“Asia/Shanghai”,或者一个自定义ID比如“GMT-8:00”
<!--Spring配置--> <bean id="timeZone" class="java.util.TimeZone" factory-method="getTimeZone"> <constructor-arg> <value>GMT+8:00</value> </constructor-arg> </bean>
<!--在TriggerBean注入--> <bean id="testJob" class="org.eu.raybit..jobs.TestJob" /> <bean id="testJobMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="testJob" /> </property> <property name="targetMethod"> <value>execute</value> </property> </bean> <bean id="testJobTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="testJobMethod"></property> <property name="cronExpression" value="0 0 0 1/1 * ? "></property> <property name="timeZone" ref="timeZone"/> </bean>