[英]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.