spring(springboot)利用注解实现定时任务并实现异步处理

xiaoxiao2021-07-27  339

spring定时任务动态启停和修改执行周期:https://blog.csdn.net/QiaoRui_/article/details/83110794

spring定时任务利用Redis分布式锁进行集群部署:https://blog.csdn.net/QiaoRui_/article/details/83141060

spring3.0之后就实现了自己的定时任务,而且非常简单

1.在启动类上加 @EnableScheduling 注解开启定时任务支持

2.在自己的定时任务类上加 @EnableScheduling 即可,第一步不用说了,第二步代码如下

@Configuration//配置类 @EnableScheduling//支持定时任务类 public class SimpleScheduleConfig { @Scheduled(cron = "0/1 * * * * ?")//每隔1秒执行一次 public void configureTasks() throws InterruptedException { //业务处理 System.err.println("执行定时任务"); Thread.sleep(3000); System.err.println("执行定时任务: 休眠后"); } }

       这样就完全实现了定时任务,就是这么简单,但是现在有一个问题,这个业务最少要执行3秒,可是定时是每秒执行,现在是同步执行只有等上一个定时任务执行完才会执行下一次任务,所以现在的控制台输出是下图,前一次执行完执行下一次,会一直等着,我们如果有需求要让他异步执行,不管上次执行完没有都要执行新的任务

3.实现定时任务的异步处理,在启动类上加 @EnableAsync 注解开启支持异步

4.在需要实现异步的方法上加 @Async 开启异步即可

@Configuration//配置类 @EnableScheduling//支持定时任务类 public class SimpleScheduleConfig { @Scheduled(cron = "0/1 * * * * ?")//每隔1秒执行一次 @Async//开启异步方法 public void configureTasks() throws InterruptedException { //业务处理 System.err.println("执行定时任务"); Thread.sleep(3000); System.err.println("执行定时任务: 休眠后"); } }

现在控制台如下

可以看出这次完全就是不等上一次执行完就可以执行下一次

转载请注明原文地址: https://www.6miu.com/read-4823438.html

最新回复(0)