與 Spring 和 Grails 一樣,Micronaut 具有用于調(diào)度后臺任務(wù)的 Scheduled 注解。
使用@Scheduled 注解
Scheduled 注釋可以添加到 bean 的任何方法,您應(yīng)該設(shè)置 fixedRate、fixedDelay 或 cron 成員之一。
請記住,bean 的范圍會影響行為。每次執(zhí)行計(jì)劃的方法時,@Singleton bean 共享狀態(tài)(實(shí)例的字段),而對于 @Prototype bean,每次執(zhí)行都會創(chuàng)建一個新實(shí)例。
以固定速率調(diào)度
要以固定速率安排任務(wù),請使用 fixedRate 成員。例如:
固定利率示例
Java | Groovy | Kotlin |
|
|
|
上面的任務(wù)每五分鐘執(zhí)行一次。
固定延遲調(diào)度
要安排任務(wù)使其在前一個任務(wù)終止后五分鐘運(yùn)行,請使用 fixedDelay 成員。例如:
固定延遲示例
Java | Groovy | Kotlin |
|
|
|
安排 Cron 任務(wù)
要安排 Cron 任務(wù),請使用 cron 成員:
計(jì)劃實(shí)例
Java | Groovy | Kotlin |
|
|
|
上面的示例在服務(wù)器時區(qū)的每周一上午 10:15 運(yùn)行任務(wù)。
僅具有初始延遲的調(diào)度
要安排任務(wù)使其在服務(wù)器啟動后運(yùn)行一次,請使用 initialDelay 成員:
初始延遲示例
Java | Groovy | Kotlin |
|
|
|
上面的例子只運(yùn)行一次,在服務(wù)器啟動后一分鐘。
以編程方式安排任務(wù)
要以編程方式安排任務(wù),請使用可以按如下方式注入的 TaskScheduler bean:
Java | Groovy | Kotlin |
|
|
|
使用注釋元數(shù)據(jù)配置計(jì)劃任務(wù)
要使您的應(yīng)用程序的任務(wù)可配置,您可以使用注釋元數(shù)據(jù)和屬性占位符配置。例如:
允許配置任務(wù)
Java | Groovy | Kotlin |
|
|
|
上面的示例允許使用屬性 my.task.rate 配置任務(wù)執(zhí)行頻率,并使用屬性 my.task.delay 配置初始延遲。
配置定時任務(wù)線程池
@Scheduled 執(zhí)行的任務(wù)默認(rèn)在 ScheduledExecutorService 上運(yùn)行,該服務(wù)配置為具有兩倍于可用處理器的線程數(shù)。
您可以在您的配置文件(例如 application.yml)中配置此線程池:
配置定時任務(wù)線程池
Properties | Yaml | Toml | Groovy | Hocon | JSON |
|
|
|
|
|
|
屬性 | 類型 | 描述 |
---|---|---|
|
java.lang.Integer |
|
|
||
|
java.lang.Integer |
|
|
java.lang.Integer |
|
|
java.lang.Class |
|
|
java.lang.String |
設(shè)置執(zhí)行者名稱。 |
|
java.lang.Integer |
設(shè)置 FIXED 的線程數(shù)。默認(rèn)值(2 * Java 虛擬機(jī)可用的處理器數(shù))。 |
處理異常
默認(rèn)情況下,Micronaut 包含一個 DefaultTaskExceptionHandler bean,它實(shí)現(xiàn)了 TaskExceptionHandler 接口,如果調(diào)用計(jì)劃任務(wù)時發(fā)生錯誤,則只記錄異常。
如果您有自定義要求,您可以用您自己的實(shí)現(xiàn)替換此 bean(例如發(fā)送電子郵件或關(guān)閉上下文以快速失敗)。為此,請編寫您自己的 TaskExceptionHandler 并使用 @Replaces(DefaultTaskExceptionHandler.class) 對其進(jìn)行注釋。
更多建議: