關於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》
相關文章
相關標籤/搜索