Fan*_*dic 5 java timezone quartz-scheduler
我用Tomcat运行-Duser.timezone=UTC.但Quartz调度程序2.2.1似乎在欧洲/布拉格运行,这是我的操作系统时区.
有没有办法在自定义时区运行Quartz或确定Quartz正在使用哪个时区?如果没有,有没有办法以编程方式确定操作系统时区?
如果您使用XML配置文件,例如quartz-config.xml从实例运行多个作业石英 mkyong的,您可以配置元素中的时区time-zone:
<schedule>
<job>
<name>JobA</name>
<group>GroupDummy</group>
<description>This is Job A</description>
<job-class>com.mkyong.quartz.JobA</job-class>
</job>
<trigger>
<cron>
<name>dummyTriggerNameA</name>
<job-name>JobA</job-name>
<job-group>GroupDummy</job-group>
<!-- It will run every 5 seconds -->
<cron-expression>0/5 * * * * ?</cron-expression>
<time-zone>UTC</time-zone>
</cron>
</trigger>
</schedule>
Run Code Online (Sandbox Code Playgroud)
另请参阅Java的java.util.TimeZone以查看多个时区的ID.
默认情况下,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>
Run Code Online (Sandbox Code Playgroud)
如果您使用纯Java:
Trigger yourTrigger = TriggerBuilder
.newTrigger()
.withIdentity("TRIGGER-ID", "TRIGGER-GROUP")
.withSchedule(CronScheduleBuilder
.cronSchedule("0 0 0/1 * * ?")
.inTimeZone(TimeZone.getTimeZone("GMT")))
).build();
Run Code Online (Sandbox Code Playgroud)
您可以调用setTimeZone()为 Quartz 中继承BaseCalendar 的任何内容设置您选择的时区。
Java 的TimeZone类有一个getDefault(),它应该有助于以编程方式确定操作系统时区。
| 归档时间: |
|
| 查看次数: |
11519 次 |
| 最近记录: |