[英]Spring schedulers didnt work properly
在 Weblogic 12 上部署了 Spring 項目。在項目中,很少有 spring 調度程序,如
@Component
public class ExampleScheduler {
@Autowired
ExampleService exampleService;
@Scheduled(fixedDelay = 1000)
private void run(){
exampleService.doSomething();
}
}
調度程序的設置:
<task:annotation-driven executor="executor" scheduler="scheduler"/>
<task:executor id="executor" pool-size="20"/>
<task:scheduler id="scheduler" pool-size="40"/>
class 中的@EnableScheduling 使用@Configuration。
問題是 fixedDelay 可以正常工作兩次,然后在迭代之間暫停 1.5 分鍾。 我在 Scheduled 注釋中嘗試了 fixedRate 或 cron,但沒有幫助。
計划任務中的方法工作時間為 100 毫秒,項目有足夠的 memory,但調度程序工作緩慢。
設計了fixedDelay參數,以便下一個任務的計時器在上一個完成后啟動。 即,如果您的任務運行了0.5秒,那么它將有效地重復每1.5秒一次。
ps所以fixedDelay最好是避免多個進程試圖互相擊敗並導致競爭狀況。 例如,您有一個計划的任務來更新一些值,此過程可能需要0.1秒到5秒的任何時間,但是您想每秒刷新一次。 您將使用fixedDelay來避免讓多個線程嘗試同時使用舊數據完成任務的情況下同時完成同一任務,從而可以從較新的任務中刪除正確的值。
fixedRate度量從每個過程的開始。 這將是直接的:
@Scheduled(fixedRate=500)
因為您每半秒需要一次,所以cron並不是最佳選擇,因為它只能指定秒,但是如果需要,它將看起來像這樣,其中6個輸入點和區域是可選的:
@Scheduled(zone = "EST", cron = "* * * * * *")
您的課程必須至少具有以下注釋:
包org.springframework.scheduling.annotation
@Configuration
@EnableScheduling
您可以使用fixedDelay進行設置
@Scheduled(fixedDelay = 1000)
與initialDelay也:
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
或帶有fixedRate(當每次任務執行獨立時)
@Scheduled(fixedRate = 1000)
可能是 @ComponentScan 注釋未正確掃描調度程序組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.