返回
快速掌握SpringBoot开启/关闭定时任务诀窍
后端
2023-04-26 22:11:47
SpringBoot定时任务:轻松掌控开启与关闭
在SpringBoot中,定时任务的实现十分便捷,但对于定时任务的灵活控制,则需要深入了解配置文件的奥妙。
一、注解搞定定时任务
SpringBoot提供了@Scheduled
注解,轻松实现定时任务。只需在需要执行定时任务的方法上添加该注解,并指定执行时间即可。
@Scheduled(cron = "0/5 * * * * ?")
public void printTime() {
System.out.println(new Date());
}
这段代码将每5秒执行一次printTime()方法。
二、配置文件控制定时任务
为了实现定时任务的开关控制,需要借助配置文件application.yml。
- 自动关闭定时任务:
spring:
task:
scheduler:
shutdown: true
当SpringBoot容器关闭时,自动关闭定时任务线程池。
- 动态开关定时任务:
management:
endpoint:
shutdown:
enabled: true
管理端暴露shutdown端点,通过该端点控制定时任务的开启与关闭。
三、实战案例:动态开关定时任务
- application.yml配置:
spring:
task:
scheduler:
shutdown: true
management:
endpoint:
shutdown:
enabled: true
- 定时任务代码:
@Scheduled(cron = "0/5 * * * * ?")
public void printTime() {
System.out.println(new Date());
}
-
启动SpringBoot程序。
-
通过shutdown端点关闭定时任务:
- 浏览器输入:http://localhost:8080/actuator/shutdown
- 命令行输入:curl -X POST http://localhost:8080/actuator/shutdown
程序将关闭定时任务线程池,打印日志:
2023-03-08 14:39:46.583 INFO 3060 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'scheduledExecutorService-1'
四、常见问题解答
1. 如何使用自定义时间表达式指定定时任务的执行时间?
- 使用cron表达式,如:"0/5 * * * * ?"表示每5秒执行一次任务。
2. 如何在配置文件中设置多个定时任务?
- 在yml文件中添加多个定时任务配置,如:
spring:
task:
scheduler:
cron: "0/5 * * * * ?"
cron2: "0/10 * * * * ?"
3. 如何查看定时任务的执行日志?
- 在application.yml文件中设置日志级别:
logging:
level:
org.springframework.scheduling: DEBUG
4. 如何禁用SpringBoot容器关闭时自动关闭定时任务?
- 设置
spring.task.scheduler.shutdown
为false。
5. 如何使用Actuator端点动态更改定时任务的执行时间表达式?
- 通过actuator端点/actuator/scheduler,可以动态更改定时任务的执行时间表达式。