SpringBoot系列(六):使用SpringBoot定时任务时不得不采的坑

摘要:本文我们将分享介绍如何基于Spring Boot搭建的项目使用Spring Task定时任务,带领各位小伙伴踩一踩在使用Spring定时任务时所出现的坑,并采用线程池~多线程任务调度的形式对出现的坑加以解决、优化!

内容:对于定时任务,相信各位小伙伴都有所耳闻,甚至有些小伙伴对定时任务的使用已经到了“炉火纯青”的地步!而事实上,在实际的项目、特别是企业级Spring的项目开发中, Spring Task定时任务的使用是相当频繁的。

本文我们将基于前文Spring Boot搭建的标准企业级项目作为奠基,采用注解的形式将Spring Task定时任务应用到项目中,那废话不多讲,咱们直接进入撸码环节!

(1)首先,我们在 com.debug.springboot.server 包目录下建立scheduler包目录,并在其下建立一个通用化的用于编写定时任务的CommonScheduler 类,如下源代码所示,我们建立了三个定时任务,其中每个定时任务执行的时间频率分别为每5s、每6s、每7s执行一次:

/**
 * spring task-定时任务调度
 * @Author:debug (SteadyJack)
 * @Date: 2019/9/7 11:05
 **/
@Component
public class CommonScheduler {
    private static final Logger log= LoggerFactory.getLogger(CommonScheduler.class);

    //定时任务1
    @Scheduled(cron = "0/5 * * * * *")
    public void schedulerOne(){
        log.info("---执行定时任务1---");
    }

    //定时任务2
    @Scheduled(cron = "0/6 * * * * *")
    public void schedulerTwo(){
        log.info("---执行定时任务2---");

        try {
            //模拟当前定时任务每次执行业务逻辑时需要花费的时间 3s
            Thread.sleep(3000);
        }catch (Exception e){e.printStackTrace();}
    }

    //定时任务3
    @Scheduled(cron = "0/7 * * * * *")
    public void schedulerThree(){
        log.info("---执行定时任务3---");

        try {
            //模拟当前定时任务每次执行业务逻辑时需要花费的时间 4s
            Thread.sleep(4000);
        }catch (Exception e){e.printStackTrace();}
    }
}

(2)其中,为了更好的模拟在实际项目开发中 定时任务 执行的业务逻辑,我们假定了每次执行定时任务2时需要花费3s的时间,定时任务3执行业务逻辑时需要花费4s的时间。

理论上,每个定时任务在执行相应的业务逻辑时,是不应该相互影响的,即在理想的情况下,SchedulerOne应当每隔5s执行一次业务逻辑,SchedulerTwo应当每隔6s执行一次业务逻辑,SchedulerThree应当每隔7s执行一次业务逻辑,以此类推。

更多请见:http://www.mark-to-win.com/tutorial/51038.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值