Java Quartz 默认时区



我用-Duser.timezone=UTC运行Tomcat。但是,Quartz 调度程序 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();

如果您使用的是 XML 配置文件,例如 示例 在 mkyong 的石英中运行多个作业quartz-config.xml,您可以在元素中配置时区 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>

另请参阅 Java 的 java.util.TimeZone 以查看多个时区的 ID。

您可以调用 setTimeZone() 来为 Quartz 中继承 BaseCalendar 的任何内容设置您选择的时区。

Java的TimeZone类有一个getDefault(),它应该有助于以编程方式确定操作系统时区。

相关内容

  • 没有找到相关文章

最新更新