使用spring的@Scheduled注解執行定時任務,啟動項目不輸出警告


在applicationContext.xml中添加:

xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.0.xsd">


<task:annotation-driven executor="myExecutor" scheduler="myScheduler" />
<task:executor id="myExecutor" pool-size="5" />
<task:scheduler id="myScheduler" pool-size="10" />

 

java代碼:

@Component
public class CleanExpireTokenTask {

    private Logger logger = LoggerFactory.getLogger(LogTag.BUSINESS);
    
    @Scheduled(cron = "0 * * * * ?")
    public void startUpdateSaleThread(){
        try{
            System.out.println("check token expire");
        }catch(Exception e){
            logger.error("Make salesReport faild",e);
        }
    }
}

 

注意:

實現類上要加注解@Component

定時器的任務方法不能有返回值

配置及啟動報錯問題參考自
 
2016-11-22日 安全關閉spring定時任務線程池
java代碼
 
          

@Resource(name = "myScheduler")
private ThreadPoolTaskScheduler threadPoolTaskScheduler;

/**
* 等待正在執行的定時任務執行完畢,不再執行新的定時任務,
*/
public void shutdown(){
  threadPoolTaskScheduler.shutdown();
  // 等待任務執行完畢
  while(threadPoolTaskScheduler.getActiveCount() > 0){
    try {
      Thread.sleep(2000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}

 

注:1.根據測試,通過此方式創建的定時任務,比如每分鍾0秒執行任務,如果上一分鍾0秒執行的任務還沒執行完,則這次任務就不會啟動。
  2.在ThreadPoolTaskScheduler調用shutdown方法后,不會殺掉正在執行的任務,已啟動的定時任務可以執行完,這時如果定時任務執行Thread.sleep方法,會拋 InterruptedException,需要注意。
參考自


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM