• SpringBoot 简单整合 quartz 实现定时任务


    SpringBoot 简单整合 quartz 实现定时任务

    遇到了定时任务的需求,这里不使用 springboot 自带的 @Scheduled 注解,使用的是第三方框架 quartz。

    1、Quartz 核心组件

    • 调度器:Scheduler。
    • 任务:Job。
    • 触发器:Trigger,包括 SimpleTrigger 和 CronTrigger。

    1.1、Job(任务):是一个接口,有一个方法 void execute(),可以通过实现该接口来定义需要执行的任务。

    1.2、Trigger(触发器):描述触发 Job 执行的时间触发规则,实现类 SimpleTrigger 和 CronTrigger 可以通过crom 表达式定义出各种复杂的调度方案。

    1.3、Scheduler(调度器):代表一个 quartz 的独立运行容器。Trigger 和 JobDetail 可以注册到 Scheduler 中。Scheduler 可以将 Trigger 绑定到某一 JobDetail 上,这样当 Trigger 被触发时,对应的 Job 就会执行。一个 Job 可以对应多个 Trigger,但一个 Trigger 只能对应一个 Job 。

    2、CronTrigger 表达式规则

    image-20220217175956401
    可通过在线生成 cron 表达式的工具:http://cron.qqe2.com/ 来生成自己想要的表达式。

    以下是 cron 表达式的例子:

    img

    3、整合 quartz

    3.1、添加 jar 包依赖

    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.3.2</version>
    </dependency>
    

    3.2、实现 Job 接口,在 execute 方法中实现业务逻辑

    public class TestJob implements Job {
    
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            System.out.println("===========成功运行定时任务===========");
            System.out.println(jobExecutionContext.getJobDetail().getKey());
        }
    }
    
    

    3.3、创建启动加载类,创建 JobDetail 实例、Trigger 触发器注册到 scheduler, 并开启调度

    @Component
    public class TestRunner implements ApplicationRunner {
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            //创建scheduler
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
    
            //创建TestJob的JobDetail实例,并设置name
            JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
                    .withIdentity("testDetail")
                    .build();
    
            //cron表达式,每秒执行一次
            String cron = "0/1 * * * * ? ";
    
            //创建Trigger触发器,使用cronSchedule方式调度
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("testTrigger")
                    .withSchedule(CronScheduleBuilder.cronSchedule(cron))
                    .build();
    
            //注册JobDetail实例到scheduler,并使用对应的trigger触发
            scheduler.scheduleJob(jobDetail, trigger);
            //启动scheduler
            scheduler.start();
        }
    }
    

    3.4、启动 main 程序,程序加载成功后开始运行任务

    image-20220217174551181

    参考资料:https://blog.csdn.net/pan_junbiao/article/details/109556822

    参考资料:https://www.jianshu.com/p/dc814e8014b0

  • 相关阅读:
    java的map
    linux的date的几个例子
    URI记录
    eclipse进行关联代码
    hive的top n
    python类定义
    sql一些常用的经典语句,最后是select as的用法
    linux,shell脚本set -x的意思
    python循环for,range,xrange;while
    python安装json的方法;以及三种json库的区别
  • 原文地址:https://www.cnblogs.com/CF1314/p/15905864.html
Copyright © 2020-2023  润新知