2011-08-08 2 views
0

私は2つの異なるジョブを持っていますが、同時に何をトリガーする必要がありますか。複数のQuartzシングルスレッドジョブを構成する方法

私はそれらのすべてのための別のスレッドを提供したいと思います。もちろん iはプロパティ

org.quartz.threadPool.threadCount = 1 

を設定し、一つのスレッドだけを使用するようにクオーツを設定することができます。しかし、それは両方のジョブが同じスレッドを使用すること、を意味します。 threadCount = 2に設定すると、最初のジョブが2回トリガーされ、もう1つのジョブが待機する可能性があります。

これらのジョブを別々のスレッドで個別に実行するにはどうすればよいですか。

マイSpring構成は、そのようなものです:

<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

大きなスレッドプールのために最初のジョブが2回スケジュールされるのはなぜですか? – Perception

+0

毎分ジョブの実行をスケジュールし、最後の実行に1分以上かかる場合、スケジューラはジョブの2番目のインスタンスを並列に実行できます。 – never

+0

私は2つの異なるSchedulerFactoryBeansが必要かもしれないと思っています。なぜあなたはこのbtwが必要ですか?スレッドセーフではないクラスですか? – chrislovecnm

答えて

0

私の推薦は、あなたが別のSchedulerFactoryBeansを使用することです。

0

あなたのジョブクラスに@DisallowConcurrentExecutionアノテーションを付けることをお勧めします。 the Quartz documentationを参照してください。

関連する問題