前置知识--Quartz

前置知识--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("这是要执行的任务");
    }

  }
  // 第一步,创建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);

关于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");
      }
    }

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

只需两步:

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot Quartz Starter是一个用于在Spring Boot应用程序中集成Quartz调度框架的库。Quartz是一个功能强大的开源任务调度框架,可以用于在Java应用程序中执行定时任务、计划任务等。 使用Spring Boot Quartz Starter,你可以很方便地将Quartz集成到你的Spring Boot应用程序中。它提供了一些自动配和便利的功能,让你能够更快地开始使用Quartz。 要使用Spring Boot Quartz Starter,你需要在你的项目中添加相应的依赖。在Maven项目中,你可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 添加了依赖之后,你可以使用Spring Boot提供的注解和配来定义和管理Quartz任务。通过使用`@EnableScheduling`注解,你可以启用Spring的任务调度功能。然后,你可以使用`@Scheduled`注解来定义定时任务的执行规则。 下面是一个简单的示例,演示了如何使用Spring Boot Quartz Starter创建一个定时任务: ```java import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @EnableScheduling public class MyScheduler { @Scheduled(cron = "0 0/5 * * * ?") // 每5分钟执行一次 public void myTask() { // 定时任务的业务逻辑 System.out.println("定时任务执行了!"); } } ``` 在这个示例中,我们创建了一个名为`MyScheduler`的组件,并使用`@EnableScheduling`注解启用了Spring的任务调度功能。然后,我们使用`@Scheduled`注解定义了一个定时任务`myTask()`,它将每5分钟执行一次。 这只是一个简单的示例,你可以根据自己的需求来定义更复杂的定时任务。Spring Boot Quartz Starter提供了更多的功能和配选项,可以帮助你更好地管理和调度任务。 希望能对你有所帮助!如果你有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值