我创建了一个带有两个石英调度程序的弹簧应用程序,其中第一个具有3个触发器,第二个具有一个触发器。
所有这些触发器都设置为同时操作false。
当我运行此操作时,似乎只有第二个调度程序中的作业触发器开火。Triggerjobb也需要很少的时间来执行。
我的问题是,在一个春季上下文中使用两个调度程序会导致执行问题以及是否是一个好习惯。
<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>
您需要为每个调度程序设置名称,否则弹簧只需用第二个调度程序覆盖第一个调度程序。
<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。它是 调度程序bean(确切地调用其开始方法调用 汇总的石英Cheduler。启动触发s)的启动方法, 由SchedulerFactoryBean提供。事实上这个 调度程序存储(和查找)在计划中(如果 未明确设置的每个配置的默认值相同 SchedulerFactoryBean)在SchedulerRepository中 Singleton(SchedulerRepository.getInstance())。
这就是方式,除非您为您的 SchedulerFactoryBean-S,您将始终通过每个调度程序获得相同的调度程序 和每个SchedulerFactoryBean-S
http://forum.springsource.org/showthread.php?40945-multiple-quartz-schedulerfactorybean-instances