如何配置多个Quartz单线程作业

时间:2011-08-08 10:31:26

标签: java spring quartz-scheduler

我有2个不同的工作,必须在同一时间触发。

我想为每个人提供一个单独的帖子。 当然我可以将Quartz配置为仅使用一个线程,设置属性

org.quartz.threadPool.threadCount = 1

但这意味着两个作业都将使用相同的线程。如果我设置threadCount = 2,则第一个作业可能会被触发两次,另一个作业将等待。

那么,我怎么能独立地在不同的线程中运行这些作业呢?

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

2 个答案:

答案 0 :(得分:0)

我的建议是你使用不同的SchedulerFactoryBeans。

答案 1 :(得分:0)

我的建议是使用@DisallowConcurrentExecution注释您的工作类。请参阅the Quartz documentation