• 前置知识--Quartz


    quartz使用

    概念:什么是quartz?

    任务调度。简单来说,就是设置某个时间,该干什么事情。

    里面有三个比较重要的对象:

    1. job(任务)
      我们需要实现一个接口,并重写execute()方法,用户书写任务。
      我们需要知道JobDetail对象,调度器用。
    2. Trigger(触发器)
      可以使用SimplTrigger触发,也可以使用CronTrigger触发(cron表达式描述各种复杂的时间调度计划)。
    3. Scheduler(调度器)
      调度job与trigger。

    举一个非常简单的例子:

    
    // 实现Job接口,重写execute()方法。
    public class DemoJob implements Job {
    
        public DemoJob() {
    
        }
    
        public void execute(JobExecutionContext context)throws JobExecutionException{
          System.err.println("这是要执行的任务");
        }
    
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
      // 第一步,创建JobDetail实例,并于DemoJob绑定
      JobDetail jobDetail = newJob(DemoJob.class)
          .withIdentity("myJob", "group1") // name "myJob", group "group1"
          .build();
    
      // 第二步,构建触发器
      Trigger trigger = newTrigger()
            .withIdentity("myTrigger", "group1")
            .startNow()
            .withSchedule(simpleSchedule()
                .withIntervalInSeconds(40)
                .repeatForever())            
            .build();
    
      // 第三步,创建调度器Scheduler并执行
      Scheduler scheduler = new StdSchedulerFactory().getScheduler();
      scheduler.scheduleJob(jobDetail, trigger);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    关于quartz的细节

    1.可以在构建JobDetail的时候,传一些参数给Job对象。通过JobDataMap。

      JobDetail job = newJob(DemoJob.class)
          .withIdentity("myJob", "group1") // name "myJob", group "group1"
          .usingJobData("testKey1", "value1")
          .usingJobData("testKey2", "value2")
          .build();
    
      public class DemoJob implements Job {
      
          public DemoJob() {
          }
      
          public void execute(JobExecutionContext context)throws JobExecutionException{
            //  JobDataMap 用于接收JobDetails的数据
            JobDataMap dataMap = context.getJobDetail().getJobDataMap();
      
            // 获取这两个值
            String key1Value = dataMap.getString("testKey1");
            String key2Value = dataMap.getString("testKey2");
          }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2.监听器:JobListener、TriggerListeners、SchedulerListeners
    触发JobDetails对象的时候,监听器起作用。同理,别的也是这样。

    只需两步:

    1. 实现JobListener,并重写其中的方法。
    2. 通过scheduler,添加全局监听。

    3.JobStore
    定义:JobStore是存放Job和Trigger的地方。因为我们需要被Scheduler调用的任务大多数并不是一次性的任务,而是需要被定时触发,或者某个时间点才能被触发的。
    因此我们需要一个容器来存储Job和Trigger的相关内容。

    JobStore有三种存储模式:
    1.一种是基于本地内存的RAMJobStore模式。
    2.一种是基于数据库的JDBCJobStore。
    3.一种是名为TerracottaJobStore的模式,该模式不依赖数据库。

  • 相关阅读:
    nRF5340(入门篇)之1.4 浅谈双核系统
    辅助生成:低延迟文本生成的新方向
    基于docker-k8s的web集群
    Github搜索技巧
    Android Studio Dolphin Patch 1 简介及下载地址
    Character.AI:产品优势和商业壁垒在哪里?
    xLua Lua访问C#注意事项(七)
    Elasticsearch安装
    SpringCloud LoadBalancer 新一代负载均衡器
    JAVA - 网络编程
  • 原文地址:https://blog.csdn.net/sugerfle/article/details/133769830