我使用两个石英调度程序创建了一个Spring应用程序,其中第一个具有3个触发器,第二个具有一个触发器。
所有这些触发器都被设置为并发操作false。
当我运行这个程序时,似乎只有第二个调度程序中的作业触发器才会被触发。执行triggerJobB所需的时间也非常少。
我的问题是,在一个spring上下文中使用两个调度程序是否会导致执行问题,以及这是否是一个很好的实践。
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="triggerJobA" />
<ref bean="triggerJobC" />
<ref bean="triggerJobD" />
</list>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="triggerJobB" />
</list>
</property>
</bean>
发布于 2012-12-21 11:10:02
您需要为每个调度程序设置名称,否则spring只会用第二个计划程序覆盖第一个调度程序。
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="schedulerName" value="SchedulerOne"/>
<property name="triggers">
<list>
<ref bean="triggerJobA" />
<ref bean="triggerJobC" />
<ref bean="triggerJobD" />
</list>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="schedulerName" value="SchedulerTwo"/>
<property name="triggers">
<list>
<ref bean="triggerJobB" />
</list>
</property>
</bean>
其原因是:
“作业执行者”实际上不是SchedulerFactoryBean。它是Scheduler (准确地说,调用它的start方法调用触发触发器的聚合QuartzScheduler.start方法),它由SchedulerFactoryBean提供。事实上,这个Scheduler存储(和查找)在schedulerName(如果没有显式设置的话,对于每个配置的SchedulerFactoryBean)在SchedulerRepository单例(SchedulerRepository.getInstance())中具有相同的默认值。 这样,除非为SchedulerFactoryBean设置不同的schedulerName,否则每个SchedulerFactoryBean都会得到相同的调度程序。
http://forum.springsource.org/showthread.php?40945-Multiple-Quartz-SchedulerFactoryBean-instances
https://stackoverflow.com/questions/13985797
复制相似问题