###问题描述 工做中用到了spring与quatz来实现定时器触发一些计划任务,本来都写在一个配置文件里。后来将不一样业务逻辑拆分红两个文件后,发现每次spring容器启动后,只有其中一个文件中配置的计划任务有再执行,另外一个则没有。spring
###解决方案 经过google在stackoverflow上找到了解决方案,其实缘由很简单。在spring容器中配置了多个Scheduler的状况下,必须给每一个Scheduler指定name与id,不然配置了单例的多个Scheduler初始化时会相互覆盖,形成只有一个Scheduler的配置有在运行。 因此要对配置文件作以下修改:google
<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>
###参考资料code