我運行Tomcat -Duser.timezone=UTC
。不過Quartz scheduler 2.2.1似乎在我的操作系統時區的歐洲/布拉格運行。Java Quartz默認時區
有沒有辦法在自定義時區中運行Quartz或確定Quartz正在使用哪個時區? 如果沒有,是否有方法以編程方式確定操作系統時區?
我運行Tomcat -Duser.timezone=UTC
。不過Quartz scheduler 2.2.1似乎在我的操作系統時區的歐洲/布拉格運行。Java Quartz默認時區
有沒有辦法在自定義時區中運行Quartz或確定Quartz正在使用哪個時區? 如果沒有,是否有方法以編程方式確定操作系統時區?
您可以撥打setTimeZone()來設置您所選擇的時區,以便繼承BaseCalendar的Quartz中的任何內容。
Java的TimeZone類有getDefault()這應該有助於以編程方式確定OS時區。
如果您使用XML配置文件,例如從mkyong的Example To Run Multiple Jobs In Quartz的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's java.util.TimeZone見看到ID爲幾個時區。
我以編程方式設置觸發器。另外我需要設置石英本身的時間區域 – Fandic
默認情況下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();
也許蔭不能正確解釋我的問題,我的appologies。 我的應用程序運行在與石英不同的時區。我需要設置整個石英的時區,而不是觸發器。 TimeZone.getDefault()表示應用程序使用UTC,但石英觸發器在歐洲/布拉格 – Fandic
換句話說:Quartz似乎在ingnore'-Duser.timezone = UTC'虛擬機參數 – Fandic
@Fandic,如果你可以闡述你的架構/ setup/scenario在原始問題中很有用。關於設置所有石英的時區,也許您可以使用作爲[主配置](http://quartz-scheduler.org/documentation/quartz-2.2.x/configuration/ConfigMain)一部分提供的自定義鍵/值對)選項?此外,你可能可以使用你的-Duser.timezone = UTC JVM arg並通過TimeZone.setDefault()來強制執行它? –