Java Quartz默认时区

Fan*_*dic 5 java timezone quartz-scheduler

我用Tomcat运行-Duser.timezone=UTC.但Quartz调度程序2.2.1似乎在欧洲/布拉格运行,这是我的操作系统时区.

有没有办法在自定义时区运行Quartz或确定Quartz正在使用哪个时区?如果没有,有没有办法以编程方式确定操作系统时区?

Pau*_*gas 6

如果您使用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.


ead*_*jei 6

默认情况下,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)


Rob*_*non 2

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

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