簡體   English   中英

Spring 4 @Scheduled停止工作

[英]Spring 4 @Scheduled stops working

我正在使用@Scheduled注釋來運行一個cron作業。 調度工作一段時間,然后停止工作。 我將簡化我的代碼片段:

這是調度程序:

//org.springframework.scheduling.annotation.Scheduled
@Scheduled("*/30 * * * * *")    
public void performTask() {
    logger.info("Starting agent");
    getAgentAsyncTask().execute();
    logger.info("Ending agent");
}

這是由調度程序執行的任務

//org.springframework.scheduling.annotation.Async
@Async(TASK_EXECUTOR)
@Override
public void execute() {
    logger.info("Starting task");
    //send some rest requests
    logger.info("Ending task");
}

兩者:“起始代理”和“結束代理”被記錄的次數相等。 因此,每個調度都正確結束。

兩者:“啟動任務”和“結束任務”被記錄的次數相等。 所以,當然,“任務”並不是阻擋事物。

但它只是在一段時間后停止記錄。 可能是什么問題?

這里,TASK_EXECUTOR是以下bean:

 @Bean(TASK_EXECUTOR)
 public ThreadPoolTaskExecutor createDefaultTaskExecutor() {
          ThreadPoolTaskExecutor te = new ThreadPoolTaskExecutor();
          te.setMaxPoolSize(15);
          te.setCorePoolSize(15);
          te.initialize();
          return te;
    }

春季版:

4.1.6.RELEASE

這種情況可能是由調度方法體內的無限循環引起的,或者是否有對外部系統的調用,並且控件同步等待接收響應而沒有任何超時。

使用這個簡單的代碼片段自己嘗試一下。 該方法僅啟動一次,並且在指定的5秒間隔后不會啟動。

@Scheduled(fixedRate = 5000)
public void printPeriodically() {
    System.out.println("This is my periodic method");
    while(true) {};
}

看工作是否被絞死。 如果它確實...任務將在一段時間后執行,我的意思是在達到最大池大小后。 檢查實現代碼是否在成功執行后釋放線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM