2011-08-08 5 views
0

2 가지 다른 작업이 있는데, 동시에 어떤 작업을 트리거해야합니까?여러 석영 단일 스레드 작업을 구성하는 방법

나는 각각에 대해 별도의 스레드를 제공하고 싶습니다. 은 물론 나는 두 작업이 동일한 스레드를 사용하는 것,

org.quartz.threadPool.threadCount = 1 

그러나 그 의미 특성을 설정하는 하나의 스레드를 사용하는 석영을 구성 할 수 있습니다. threadCount = 2로 설정하면 첫 번째 작업이 두 번 트리거되고 다른 작업이 대기 할 수 있습니다.

그렇다면 이러한 작업을 개별 스레드에서 어떻게 독립적으로 실행할 수 있습니까?

내 스프링 구성은 같다 :

<bean name="Job1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="test.job1"/> 
</bean> 

<bean id="CronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="Job1"/> 
    <property name="cronExpression" value="0 * 6-21 * * ?" /> 
</bean> 

<bean name="Job2" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="test.job2"/> 
</bean> 

<bean id="CronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="Job2"/> 
    <property name="cronExpression" value="0 * 6-21 * * ?" /> 
</bean> 

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" destroy-method="destroy"> 
    <property name="waitForJobsToCompleteOnShutdown"> 
    <value>true</value> 
    </property> 
    <property name="configLocation"> 
    <value>classpath:quartz.properties</value> 
    </property> 
    <property name="triggers"> 
    <list> 
     <ref bean="CronTrigger1"/> 
     <ref bean="CronTrigger2"/> 
    </list> 
    </property> 
</bean> 
+0

왜 더 큰 threadvpool 때문에 첫 번째 작업이 두 번 스케줄링 될 것이라고 생각합니까? – Perception

+0

매분마다 작업 실행을 예약하고 마지막 실행에 1 분 이상이 걸리면 스케줄러는 작업의 두 번째 인스턴스를 병렬로 실행할 수 있습니다 ... 맞습니까? – never

+0

두 개의 다른 SchedulerFactoryBeans가 필요할 수도 있습니다. 왜이 btw가 필요한가요? 클래스가 스레드로부터 안전하지 않습니까? – chrislovecnm

답변

0

나의 추천은 당신이 다른 SchedulerFactoryBeans를 사용하는 것입니다.

0

@DisallowConcurrentExecution으로 작업 클래스에 주석을 달 것을 권장합니다. the Quartz documentation을 참조하십시오.

관련 문제