2013-10-23 59 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();