W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
與 Spring 和 Grails 一樣,Micronaut 具有用于調(diào)度后臺(tái)任務(wù)的 Scheduled 注解。
使用@Scheduled 注解
Scheduled 注釋可以添加到 bean 的任何方法,您應(yīng)該設(shè)置 fixedRate、fixedDelay 或 cron 成員之一。
請(qǐng)記住,bean 的范圍會(huì)影響行為。每次執(zhí)行計(jì)劃的方法時(shí),@Singleton bean 共享狀態(tài)(實(shí)例的字段),而對(duì)于 @Prototype bean,每次執(zhí)行都會(huì)創(chuàng)建一個(gè)新實(shí)例。
以固定速率調(diào)度
要以固定速率安排任務(wù),請(qǐng)使用 fixedRate 成員。例如:
固定利率示例
Java | Groovy | Kotlin |
|
|
|
上面的任務(wù)每五分鐘執(zhí)行一次。
固定延遲調(diào)度
要安排任務(wù)使其在前一個(gè)任務(wù)終止后五分鐘運(yùn)行,請(qǐng)使用 fixedDelay 成員。例如:
固定延遲示例
Java | Groovy | Kotlin |
|
|
|
安排 Cron 任務(wù)
要安排 Cron 任務(wù),請(qǐng)使用 cron 成員:
計(jì)劃實(shí)例
Java | Groovy | Kotlin |
|
|
|
上面的示例在服務(wù)器時(shí)區(qū)的每周一上午 10:15 運(yùn)行任務(wù)。
僅具有初始延遲的調(diào)度
要安排任務(wù)使其在服務(wù)器啟動(dòng)后運(yùn)行一次,請(qǐng)使用 initialDelay 成員:
初始延遲示例
Java | Groovy | Kotlin |
|
|
|
上面的例子只運(yùn)行一次,在服務(wù)器啟動(dòng)后一分鐘。
以編程方式安排任務(wù)
要以編程方式安排任務(wù),請(qǐng)使用可以按如下方式注入的 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 配置初始延遲。
配置定時(shí)任務(wù)線程池
@Scheduled 執(zhí)行的任務(wù)默認(rèn)在 ScheduledExecutorService 上運(yùn)行,該服務(wù)配置為具有兩倍于可用處理器的線程數(shù)。
您可以在您的配置文件(例如 application.yml)中配置此線程池:
配置定時(shí)任務(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 包含一個(gè) DefaultTaskExceptionHandler bean,它實(shí)現(xiàn)了 TaskExceptionHandler 接口,如果調(diào)用計(jì)劃任務(wù)時(shí)發(fā)生錯(cuò)誤,則只記錄異常。
如果您有自定義要求,您可以用您自己的實(shí)現(xiàn)替換此 bean(例如發(fā)送電子郵件或關(guān)閉上下文以快速失敗)。為此,請(qǐng)編寫您自己的 TaskExceptionHandler 并使用 @Replaces(DefaultTaskExceptionHandler.class) 對(duì)其進(jìn)行注釋。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: