解決Spring @Scheduler 定時器同時執行兩次的問題 Quartz同時執行2次的問題 親測可靠

解決Spring @Scheduler 定時器同時執行兩次的問題 Quartz同時執行2次的問題 親測可靠

 

一、問題描述

1、使用Spring提供的定時任務 Scheduler,在Tomcat容器中啓動後,發現同一個任務會重複執行兩次的情況。對於定時計算的數據,造成大量的服務器資源佔用,需要解決這個問題。

2、錯誤大概如下:

任務開始...

2019-10-08 17:07:24

任務結束 end...

任務開始...

2019-10-08 17:07:24

任務結束 end...

任務開始...

2019-10-08 17:07:26

任務結束 end...

任務開始...

2019-10-08 17:07:26

任務結束 end...

任務開始...

 

二、問題解決

1、在 Tomcat/conf/server.xml 文件中進行如下修改:

  • <Host> 元素中 appBase="webapps" , 修改爲: appBase=""
  • <Host>元素下的 <Context>元素中 docBase=“projectName” , 修改爲絕對路徑:

docBase="E:\EclipseWorkspace\tomcat\webapps\projectName"

 

2、參考如下:

<Host appBase="" autoDeploy="true" name="localhost" unpackWARs="true">	
    <Context docBase="E:\EclipseWorkspace\tomcat7\webapps\projectName" path="" />
</Host>

 

3、修改配置後,即可解決。

 

三、總結

1、<Host>元素下的 <Context>元素配置作用是,消除項目名稱,訪問路徑變成:http://localhost:999/

2、配置了 <Context>元素後,會導致 Spring Scheduler定時器重複執行兩次的問題。

3、配置了<Context>元素後,相當於Tomcat裏面加載了兩個應用。加上 projectName的是 appBase 下面的應用 , 不加上projectName對應的是docBase下面的應用。

4、該操作同樣適用於Quartz設置了autoStartup="true"後(<property name="autoStartup" value="true"/> ),會重複 執行兩次的問題。 (Quartz用法Quartz和Spring整合集成

5、經過測試,當<Context>元素的 path="projectName"時,不會出現重複執行2次的問題。如下:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
    <Context docBase="project" path="/project" reloadable="false" />
</Host>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章