【SpringBoot】@Scheduled 定時執行
在Spring Boot中,我们可以使用注释@Scheduled来定时执行方法。该注释可用于将方法标记为需要定期执行的方法,并提供执行计划。
@Scheduled注释支持以下属性:
1. fixedRate:以毫秒为单位的执行速率。
2. fixedDelay:以毫秒为单位的执行延迟,即上一次执行结束后的延迟时间。
3. initialDelay:第一次执行的延迟时间,以毫秒为单位。
4. cron:CRON表达式,用于更高级的定时计划。
下面是一个简单的示例,该示例演示如何使用@Scheduled注释在Spring Boot中定期执行方法:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyTask {
@Scheduled(fixedRate = 5000)
public void printMessage() {
System.out.println("Hello, world!");
}
}
在上述示例中,我们定义了一个名为MyTask的组件,其中包含一个使用@Scheduled注释标记的printMessage方法。此方法将在每隔5秒钟输出一条消息"Hello, world!"。
我们还可以使用fixedDelay属性来延迟执行。例如,如果我们将fixedDelay设置为10000,那么该方法将在上一次执行结束后等待10秒才能开始下一次执行。
@Scheduled注释还支持CRON表达式,这使得我们可以更高级地安排任务。例如,如果我们想要在每天早上6点执行任务,我们可以使用以下CRON表达式:
0 0 6 * * *
在此示例中,我们使用六个星号来指定秒,分,时,日,月和星期几。因此,此表达式将在每天早上6点执行任务。
註解停用
如果你想暂时停用@Scheduled注释标记的方法,你可以简单地注释掉它,或者将其标记为禁用,以便稍后重新启用。
要注释掉方法,请将其注释掉:
// @Scheduled(fixedRate = 5000)
public void printMessage() {
System.out.println("Hello, world!");
}
要禁用方法,您可以使用@Scheduled注释的enabled属性:
// @Scheduled(fixedRate = 5000)
public void printMessage() {
System.out.println("Hello, world!");
}
在这个例子中,我们使用@Scheduled注释的enabled属性将printMessage方法标记为已禁用。要重新启用该方法,只需将enabled属性设置为true即可。
使用命令停用
是的,您可以使用Spring Boot Actuator的端点来动态启用/禁用定时任务。Spring Boot Actuator是Spring Boot的一个附加模块,提供了很多有用的端点,可以在应用程序运行时监视和管理应用程序。
您需要在项目中添加Actuator依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然后,您可以使用`/actuator/scheduledtasks`端点来检查和管理定时任务。要暂时停用定时任务,您可以使用该端点来取消计划的任务。例如:
@Scheduled(fixedRate = 5000, name = "myTask")
public void printMessage() {
System.out.println("Hello, world!");
}
$ curl -X POST http://localhost:8080/actuator/scheduledtasks/taskName
这将取消计划名为taskName的任务。要重新启用该任务,您可以使用该端点来重新启用任务:
$ curl -X DELETE http://localhost:8080/actuator/scheduledtasks/taskName
假设您的Spring Boot应用程序正在运行,并且您已经添加了Actuator依赖项,那么您可以使用以下curl命令向`/actuator/scheduledtasks`端点发出HTTP GET请求来获取当前应用程序中所有定时任务的列表:
curl http://localhost:8080/actuator/scheduledtasks
这将返回一个JSON格式的响应,其中包含有关每个定时任务的信息,例如任务名称、任务是否启用、任务的CRON表达式等。您可以使用该响应来查看应用程序中所有的定时任务信息。
{
"cron": {
"myScheduledTask": {
"scheduled": true,
"expression": "0/30 * * * * ?"
}
},
"fixedDelay": {},
"fixedRate": {}
}