2013-10-23 58 views
2

我运行Tomcat -Duser.timezone=UTC。不过Quartz scheduler 2.2.1似乎在我的操作系统时区的欧洲/布拉格运行。Java Quartz默认时区

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

回答

2

您可以拨打setTimeZone()来设置您所选择的时区,以便继承BaseCalendar的Quartz中的任何内容。

Java的TimeZone类有getDefault()这应该有助于以编程方式确定OS时区。

+0

也许荫不能正确解释我的问题,我的appologies。 我的应用程序运行在与石英不同的时区。我需要设置整个石英的时区,而不是触发器。 TimeZone.getDefault()表示应用程序使用UTC,但石英触发器在欧洲/布拉格 – Fandic

+0

换句话说:Quartz似乎在ingnore'-Duser.timezone = UTC'虚拟机参数 – Fandic

+0

@Fandic,如果你可以阐述你的架构/ setup/scenario在原始问题中很有用。关于设置所有石英的时区,也许您可​​以使用作为[主配置](http://quartz-scheduler.org/documentation/quartz-2.2.x/configuration/ConfigMain)一部分提供的自定义键/值对)选项?此外,你可能可以使用你的-Duser.timezone = UTC JVM arg并通过TimeZone.setDefault()来强制执行它? –

6

如果您使用XML配置文件,例如从mkyong的Example To Run Multiple Jobs In Quartzquartz-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's java.util.TimeZone见看到ID为几个时区。

+0

我以编程方式设置触发器。另外我需要设置石英本身的时间区域 – Fandic

3

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