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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QiaoRui_/article/details/82999655

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("执行定时任务: 休眠后");
    }
}

现在控制台如下

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

猜你喜欢

转载自blog.csdn.net/QiaoRui_/article/details/82999655