Micronaut 计划任务
与 Spring 和 Grails 一样,Micronaut 具有用于调度后台任务的 Scheduled 注解。
使用@Scheduled 注解
Scheduled 注释可以添加到 bean 的任何方法,您应该设置 fixedRate、fixedDelay 或 cron 成员之一。
请记住,bean 的范围会影响行为。每次执行计划的方法时,@Singleton bean 共享状态(实例的字段),而对于 @Prototype bean,每次执行都会创建一个新实例。
以固定速率调度
要以固定速率安排任务,请使用 fixedRate 成员。例如:
固定利率示例
Java | Groovy | Kotlin |
|
|
|
上面的任务每五分钟执行一次。
固定延迟调度
要安排任务使其在前一个任务终止后五分钟运行,请使用 fixedDelay 成员。例如:
固定延迟示例
Java | Groovy | Kotlin |
|
|
|
安排 Cron 任务
要安排 Cron 任务,请使用 cron 成员:
计划实例
Java | Groovy | Kotlin |
|
|
|
上面的示例在服务器时区的每周一上午 10:15 运行任务。
仅具有初始延迟的调度
要安排任务使其在服务器启动后运行一次,请使用 initialDelay 成员:
初始延迟示例
Java | Groovy | Kotlin |
|
|
|
上面的例子只运行一次,在服务器启动后一分钟。
以编程方式安排任务
要以编程方式安排任务,请使用可以按如下方式注入的 TaskScheduler bean:
Java | Groovy | Kotlin |
|
|
|
使用注释元数据配置计划任务
要使您的应用程序的任务可配置,您可以使用注释元数据和属性占位符配置。例如:
允许配置任务
Java | Groovy | Kotlin |
|
|
|
上面的示例允许使用属性 my.task.rate 配置任务执行频率,并使用属性 my.task.delay 配置初始延迟。
配置定时任务线程池
@Scheduled 执行的任务默认在 ScheduledExecutorService 上运行,该服务配置为具有两倍于可用处理器的线程数。
您可以在您的配置文件(例如 application.yml)中配置此线程池:
配置定时任务线程池
Properties | Yaml | Toml | Groovy | Hocon | JSON |
|
|
|
|
|
|
属性 | 类型 | 描述 |
---|---|---|
|
java.lang.Integer |
|
|
||
|
java.lang.Integer |
|
|
java.lang.Integer |
|
|
java.lang.Class |
|
|
java.lang.String |
设置执行者名称。 |
|
java.lang.Integer |
设置 FIXED 的线程数。默认值(2 * Java 虚拟机可用的处理器数)。 |
处理异常
默认情况下,Micronaut 包含一个 DefaultTaskExceptionHandler bean,它实现了 TaskExceptionHandler 接口,如果调用计划任务时发生错误,则只记录异常。
如果您有自定义要求,您可以用您自己的实现替换此 bean(例如发送电子邮件或关闭上下文以快速失败)。为此,请编写您自己的 TaskExceptionHandler 并使用 @Replaces(DefaultTaskExceptionHandler.class) 对其进行注释。
更多建议: