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