Spring Boot整合Quarz实现定时任务开机自动触发

前言

使用Quartz实现了可配置定时任务,将定时任务Quartz写入数据库中。现在想随着项目启动能够自动触发定时任务,下面是实现方法:

项目自启动

Spring Boot使用ApplicationRunner实现项目启动之后直接执行业务操作

这篇博客详细描述了项目启动后自动执行业务操作的实现。我们只需要在run方法里面添加定时任务调用的方法接口。

		log.info("启动定时任务");
        quartzService.startQuartz();

定时任务启动

从数据库获取定时任务信息

	public void startQuartz(){
        String jobGroup ="MySyncTask";
        String jobName ="定时人数";
        try {
            //先已有的任务
            List<Quartz> list = quartzMapper.findList(jobGroup, jobName);
            if(list != null && list.size()>0){
                log.info("项目启动后,启动定时任务:{}",list.get(0).getJobName());
                doQuatrz(list.get(0));
            }
        }catch (Exception e){
            e.printStackTrace();
            log.error("项目启动后,启动定时任务发生异常:{}",e.getMessage());
            API.e("项目启动后,启动定时任务发生异常");
        }
    }

定时任务查询和触发

	private void doQuatrz(Quartz quartz){
        try {
            //直接启动
            Class cls = Class.forName(quartz.getJobClassName()) ;
            cls.newInstance();
            //构建job信息
            JobDetail job = JobBuilder.newJob(cls).withIdentity(quartz.getJobName(),quartz.getJobGroup()).withDescription(quartz.getDescription()).build();
            // 触发时间点
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(quartz.getCronExpression());
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger_"+quartz.getJobName(), quartz.getJobGroup()).withDescription(quartz.getDescription()).startNow().withSchedule(cronScheduleBuilder).build();
            //交由Scheduler安排触发
            scheduler.scheduleJob(job, trigger);
            quartz.setJobStatus(JobStatus.RUN.getStatus());
            quartzRepository.save(quartz);
        }catch (Exception e){
            e.printStackTrace();
            log.error("执行任务发生异常:{}",e.getMessage());
            API.e("执行任务发生异常");
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tung.D.Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值