2013-10-23 1 views
2

-Duser.timezone=UTC으로 Tomcat을 실행합니다. 그러나 석영 스케줄러 2.2.1 유럽/프라하 내 OS 시간대입니다에서 실행하는 것 같습니다.Java Quartz 기본 시간대

사용자 정의 시간대에서 Quartz를 실행하거나 Quartz가 사용하는 시간대를 결정하는 방법이 있습니까? 그렇지 않은 경우 프로그래밍 방식으로 OS 시간대를 확인할 수있는 방법이 있습니까?

답변

2

setTimeZone()을 호출하면 BaseCalendar을 상속 한 Quartz의 모든 항목에 대해 선택한 시간대를 설정할 수 있습니다.

Java의 TimeZone 클래스는 프로그래밍 방식으로 OS 시간대를 결정하는 데 도움이되는 getDefault()을가집니다.

+0

어쩌면 스피 할 수 없음. 내 앱이 석영과 다른 시간대에 실행 중입니다. 트리거가 아닌 전체 석영의 시간대를 설정해야합니다. TimeZone.getDefault()는 UTC이지만, 유럽/프라하의 쿼츠 트리거라고 말합니다. – Fandic

+0

다른 말로하면 Quartz는'-Duser.timezone = UTC' VM 인수 – Fandic

+0

@ Fandic을 아키텍처에 대해 설명 할 수있을 것 같습니다./setup/시나리오를 유용하게 사용할 수 있습니다. 모든 석영에 대한 시간대 설정과 관련하여 [Main Config] (http://quartz-scheduler.org/documentation/quartz-2.2.x/configuration/ConfigMain)의 일부로 제공되는 사용자 정의 키/값 쌍을 사용할 수 있습니다.) 옵션? 또한 -Duser.timezone = UTC JVM 인수를 사용하고 TimeZone.setDefault()를 사용하여이를 적용 할 수 있습니까? –

6

XML 구성 파일을 사용하는 경우. mkyong의 Example To Run Multiple Jobs In Quartz에서 quartz-config.xml, 당신은 요소 time-zone에서 시간대를 구성 할 수 있습니다 : 여러 시간대의 ID를 볼 수 있도록

<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 참조하십시오.

+0

트리거를 프로그래밍 방식으로 설정했습니다. 또한 나는 시간 자체를 설정해야한다 석영 그 자체 – Fandic

3

Quartz는 기본적으로 기본 시스템 로캘과 표준 시간대를 사용하며 사용자가 user.timezone 속성을 선택하도록 프로그래밍되어 있지 않습니다. 이것은 CronTrigger에만 적용되며 SimpleTrigger에는 적용되지 않습니다.

당신은 예를 들어 스프링을 사용하는 경우 :

<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> 

당신은 일반 자바 사용하는 경우 제대로 내 appologies을 내 문제를 설명 할

Trigger yourTrigger = TriggerBuilder 
       .newTrigger() 
       .withIdentity("TRIGGER-ID", "TRIGGER-GROUP") 
       .withSchedule(CronScheduleBuilder 
         .cronSchedule("0 0 0/1 * * ?") 
         .inTimeZone(TimeZone.getTimeZone("GMT"))) 
       ).build(); 
관련 문제