动态定时任务执行,schedule基于定时任务线程池实现指定时间运行程序

在最近工作中遇到一个业务,在每天的凌晨定时触发一个任务,产生相应的当天数据,这一块是使用springboot+quartz实现的,这个简单说一下,引入相关依赖,在需要执行的类上实现Task这个类,这个类也是quartz自带的,重新run方法后即可,在后台配置相关定时任务调度就可以了。我的业务是在当前的这个定时任务中增加一个动态的定时任务,此任务主要是动态定时给系统发送通知,主要实现如下:

第一步:

在项目的springboot启动类上加上 @EnableScheduling这个开启任务的注解。

第二步:

使用 Executors.newScheduledThreadPool(20);以线程池的方式去定义一个任务线程池,api里面的方法很多,只要理解意思开发起来就很容易:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(25);
                    //间隔多长时间触发
                    String sendMassageTime = 
                       getTimeMassage(mesEquipmentCheckTaskDTO.getPlanCheckTime(), - 
                       Integer.parseInt(mesEquipmentCheckDTO.getRemindTime()));


                    long startTime = sdf.parse(sendMassageTime).getTime()                         
                                System.currentTimeMillis();

                    //这里将时间换算为分钟
                    startTime = startTime / 1000 / 60;
                    scheduledExecutorService.schedule(new ScheduleTask(mesEquipment.getOfficeId(),mesEquipment.getEquipmentCode())
                            ,startTime,TimeUnit.MINUTES);

                    scheduledExecutorService.shutdown();

创建好定时任务线程池之后,使用 scheduledExecutorService.schedule(1,2,3)这个API来启动相应的任务参数1:代表你的定时任务类,2:相隔多长时间执行目标方法,3:执行单位是什么。

没执行一次记得shutdown()及时关闭资源

第三步:创建自己所要触发的线程类,也就是你要执行的定时任务逻辑代码。

任务类的方式还是和普通创建定时任务是一样的,第一种继承Thread后重写run方法,第二种实现Runnable接口,依然重写run方法,如果你需要你的任务有返回值的话,可以实现Callable接口,配合Future拿到结果返回值,我这里使用了实现Runnable接口,采用匿名内部类的方式:

 class ScheduleTask implements Runnable {
        private String officeId;
        private String code;
        public ScheduleTask(String officeId,String code) {
            this.officeId = officeId;
            this.code = code;
        }

        @Override
        public void run() {
        // 定时发送消息

            这里是具体的逻辑代码快......
        }

类中的两个属性值是我要用到的,所以在内部类中构建了一个全参构造,可以通过上面第二步new内部类的时候传入参数,这里就可以使用了。

这样就可以简单实现动态时间触发你的任务类了,如果想使用更多的任务方法,其实大家可以参考quartz这个强大的任务调度框架,总之能实现相应的功能就行。

简单记录一下,如果有什么错误的地方,可以留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值