关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题

关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题

###问题描述 工做中用到了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

  1. Stackoverflow: 《Using two schedulers in one Spring context》
相关文章
相关标签/搜索