SpringBoot 中使用 Quartz 创建定时任务


一、使用示例

自定义 job:

@Slf4j
public class MyJob extends QuartzJobBean {
   
    
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
   
        log.info("MyJob start...");
        long start = System.currentTimeMillis();

        MyService myService = (MyService) context.getMergedJobDataMap().get("myService");
        
        try {
   
            myService.func();
        } catch (Exception e) {
   
            log.error("MyJob error: ", e);
        }

        long end = System.currentTimeMillis();
        log.info("MyJob end in {} ms", end - start);
    }
}

配置 detail、trigger 和 schedule:

@Configuration
public class QuartzConfig {
   
    
    @Setter(onMethod_ = {
   @Autowired})
    private MyService myService;

    @Bean
    public JobDetailFactoryBean myJobDetail() {
   
        JobDetailFactoryBean detail = new JobDetailFactoryBean();
        detail.setJobClass(MyJob.class);
        detail.setDurability(true);
        Map<String, Object> jobData = new HashMap<>();
        jobData.put("myService", myService);
        detail.setJobDataAsMap(jobData);
        return detail;
    }

    @Bean
    public CronTriggerFactoryBean myJobTriggerBean() {
   
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(Objects.requireNonNull(myJobDetail().getObject()));
        trigger.setCronExpression("*/5 * * * * ?");  // 每 5 秒钟执行一次
        return trigger;
    }
    
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
   
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setTriggers(myJobTriggerBean().getObject());
        return schedulerFactoryBean;
    }
}

二、运行原理

SchedulerFactoryBean 重写了 Lifecyclestart() 方法,该方法会在 Spring 容器启动时自动执行,从而启动定时任务。

此外,JobDetailFactoryBeanCronTriggerFactoryBean 均实现了 FactoryBean 和 InitializingBean,它们会在执行 afterPropertiesSet() 时初始化并 set 对应的 JobDetailCronTrigger,并在调用 getObject() 时返回。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


参考:

https://juejin.cn/post/6844903954615107597
https://juejin.cn/post/7086353052222881829

相关推荐

  1. springboot集成Quartz定时任务组件

    2024-01-18 21:36:02       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-18 21:36:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-18 21:36:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-18 21:36:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-18 21:36:02       18 阅读

热门阅读

  1. Day6、指针的基本学习

    2024-01-18 21:36:02       29 阅读
  2. [贪心算法] 国王游戏

    2024-01-18 21:36:02       30 阅读
  3. 软件设计师考试---计算机硬件基础

    2024-01-18 21:36:02       34 阅读
  4. 服务器——配置免密登录

    2024-01-18 21:36:02       29 阅读
  5. “魔音智能去水印”隐私政策

    2024-01-18 21:36:02       40 阅读
  6. GoLang刷题之leetcode

    2024-01-18 21:36:02       34 阅读
  7. MySQL 8.0中移除的功能(一)

    2024-01-18 21:36:02       28 阅读
  8. SpringBoot集成Solr

    2024-01-18 21:36:02       31 阅读
  9. 【LeetCode算法题】各类排序算法的Python实现

    2024-01-18 21:36:02       35 阅读
  10. 10个常用的正则表达式

    2024-01-18 21:36:02       29 阅读
  11. Linux定时删除n天前的数据

    2024-01-18 21:36:02       38 阅读