关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题
关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题
Tek_Eternal 发表于3年前
关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题
  • 发表于 3年前
  • 阅读 504
  • 收藏 13
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 工作中用到了spring与quatz来实现定时器触发一些计划任务,原本都写在一个配置文件里。后来将不同业务逻辑拆分成两个文件后,发现每次spring容器启动后,只有其中一个文件中配置的计划任务有在执行,另一个则没有。

关于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>

###参考资料

  1. Stackoverflow: 《Using two schedulers in one Spring context》
标签: quatz spring
共有 人打赏支持
粉丝 10
博文 24
码字总数 16362
×
Tek_Eternal
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: