一.常用名词理解(利用绿皮火车上下车来说明)

scheduler 调度员,相当于每节车厢的乘务员,他会在你上车的时候收你的票登记,然后到站的时候叫你下车

trigger 扳机,相当于车票上的登记你在哪站下车的时机,车票必须交给调度员登记,他才能通知你下车,trigger在构造对象的时候会和jobdetail形成绑定

job 工作,相当于你到站下车这一动作,你只能在登记的时间下车,不然你就是逃票或者浪费运力资源

jobDetail 相当于你的行李,你会携带一些行李,下车之前你必须把你的行李收拾好然后一起带下车,整理行李发生在乘务员叫你下车和你下车之间。

jobData 你行李中的一张纸条,有且只能有一张,上面有一条你下车需知的信息

jobDataMap 你行李中的一本书,有且只能有一本,和jobData两个默认只能存在一个,记载了大量的信息

jobBuilder 他会通过job的class文件构造一个jobDetail,这样就形成了job和jobdetail的绑定

注:为什么不直接使用属性而使用jobData来登记属性

答:我也不知道,别问为什么我不知道,因为我菜,我猜可能是链式编程一路编到底看起来比较牛逼吧。

二.简单实战实例

(1)依赖的jar包

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-quartz</artifactId>

</dependency>

(2)job类//job和jobDetail是互相依存的

/**
 * 定时任务业务处理类,我们继承QuartzJobBean
 * 重写executeInternal方法来实现具体的定时业务逻辑
 */
public class PrintTimeJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        //获取JobDetail中关联的数据
        String msg = (String) context.getJobDetail().getJobDataMap().get("msg");
        System.out.println("current time :"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "---" + msg);

       //打印当前时间
    }
}

(3)jobDetail和trigger//因为都是配置,所以一般写到同一个类中

@Configuration
public class QuartzConfig {
   @Bean
    public JobDetail newJob(){//通过jobBuilder来创建jobDetail
        return JobBuilder.newJob(PrintTimeJob.class)//PrintTimeJob是我们的业务类//在这里形成了job和jobDetail的绑定
                .withIdentity("9527")//可以给该JobDetail起一个id//因为创建job是通过jobDetail来创建的所以他来难过的名字是一样的
                //每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取
                .usingJobData("msg", "Hello Quartz")//关联键值对//只定义了一对属性,所以使用jobData
                .storeDurably()//即使没有Trigger关联时,也不需要删除该JobDetail
                .build();//构造器模式,创建的就是一个jobDetail
    }
    @Bean
    public Trigger printTimeJobTrigger() {//触发器trigger
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ? ");//一秒执行一次
        return TriggerBuilder.newTrigger()
                .forJob(newJob())//关联上述的JobDetail//实际上关联的是上面的newJob方法
                .withIdentity("quartzTaskService")//给Trigger起个名字
                .withSchedule(cronScheduleBuilder)//关联Schedule
                .build();
    }
}

然后我们直接通过APP.java来启动springboot启动完成后由于trigger是配置类就会指定开始执行job如下图

Quartz定时器基础理解(springboot,maven,ssm环境)

相关文章:

  • 2022-12-23
  • 2021-11-19
  • 2022-03-09
  • 2021-11-29
  • 2021-04-04
  • 2021-03-26
  • 2021-11-29
猜你喜欢
  • 2021-11-29
  • 2022-12-23
  • 2022-12-23
  • 2022-01-12
  • 2022-12-23
  • 2021-10-24
  • 2021-06-30
相关资源
相似解决方案