关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题
问题描述
工作中用到了spring与quatz来实现定时器触发一些计划任务,原本都写在一个配置文件里。后来将不同业务逻辑拆分成两个文件后,发现每次spring容器启动后,只有其中一个文件中配置的计划任务有再执行,另一个则没有。
解决方案
通过google在stackoverflow上找到了解决方案,其实原因很简单。在spring容器中配置了多个Scheduler的情况下,必须给每个Scheduler指定name与id,否则配置了单例的多个Scheduler初始化时会相互覆盖,造成只有一个Scheduler的配置有在运行。
所以要对配置文件做如下修改:
<beans>
......
前面关于执行类的定义这里省略
......
<!-- Scheduler配置 如果将lazy-init=‘false‘那么容器启动就会执行调度程序,如果配置了多个,必须分配id,且每个Scheduler id不同 -->
<bean id="startQuertz" lazy-init="false" singleton="true"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--name也必须设置,保证各Scheduler之间不同即可-->
<property name="schedulerName" value="defaultScheduler"/>
<property name="triggers">
<list>
<ref bean="doTime"/>
</list>
</property>
</bean>
</beans>
参考资料
时间: 2024-10-02 19:15:31