定时任务---quartz

发布时间:2024年01月16日

什么是quartz

? ? Quartz是一个开源的作业调度框架,用于在Java应用程序中进行任务调度。它允许你在指定的时间间隔或在特定的时间点执行任务,可以实现各种灵活的调度策略。

? ?Quartz提供了一个简单而强大的API,可以轻松地创建和管理作业调度。它支持高度可配置的作业调度,可以设置作业的执行时间、重复间隔、延迟执行等。它还提供了错误恢复机制,当作业执行失败时,可以根据配置的策略进行重新调度。

JobBuilder

? ?

JobBuilder是Quartz调度器框架中的一个类,它用于创建和配置JobDetail实例。

在Quartz中,Job是可调度的任务单元,而JobDetail是用来描述Job的详细信息的类。JobDetail类的实例包含了Job的名称、所属的Job组、Job的实现类等信息。

JobBuilder提供了一组方法来创建和配置JobDetail实例。通过JobBuilder,可以设置Job的各种属性,例如名称、组名、Job的实现类、JobDataMap等。

下面是使用JobBuilder创建和配置JobDetail实例的示例代码:

JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
    .withIdentity("myJob", "group1")
    .usingJobData("message", "Hello Quartz")
    .build();

以上代码中,我们使用JobBuilder的newJob()方法创建一个JobDetail实例,并指定了Job的实现类为MyJob.class。我们还通过withIdentity()方法设置了Job的名称为"myJob",所属的组名为"group1"。最后,我们调用usingJobData()方法设置了一个名为"message"的作业数据,并将其值设置为"Hello Quartz"。

TriggerBuilder

? ? ? ?TriggerBuilder是Java中的一个设计模式,它是建造者模式的一种具体实现。建造者模式是一种创建型设计模式,用于将复杂对象的创建逻辑与其表示分离。

? ? ?TriggerBuilder的主要作用是通过一系列的方法调用来构建和配置触发器(Trigger),以便根据特定的条件或事件来执行相应的操作。触发器可以用于各种不同的应用场景,如定时任务的调度、事件监听、状态变化等。

TriggerBuilder通常包含以下几个核心组件:

  1. 构造方法(Constructor):用于创建TriggerBuilder对象的实例。

  2. 配置方法(Configuration Methods):用于配置和设置触发器的各种属性和参数。这些方法通常以链式调用的方式来组织,可以一步一步地设置不同的属性。

  3. 构建方法(Build Method):用于最终构建和返回一个完整的触发器对象。

? ? ? ?使用TriggerBuilder可以更加灵活地创建和配置触发器对象,而无需直接操作底层的构造方法和属性。它可以提供更好的可读性和可维护性,并且可以针对不同的需求和场景进行定制化的配置。

以下是一个简单的示例代码,展示了如何使用TriggerBuilder创建一个定时任务的触发器:

Trigger trigger = TriggerBuilder.newTrigger()
    .withIdentity("myTrigger", "group1")
    .startNow()
    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
        .withIntervalInSeconds(10)
        .repeatForever())
    .build();

在上述示例中,我们通过TriggerBuilder创建了一个定时任务的触发器。我们设置了触发器的标识(identity)、启动时间(startNow)和触发规则(withSchedule)等属性。最后调用build方法来构建并返回一个完整的触发器对象。

SchedulerFactory

? ? ? SchedulerFactory是Quartz调度框架中的一个类,用于创建和配置调度器(Scheduler)。

? ? ?SchedulerFactory是Quartz调度器的工厂类,用于创建调度器实例。它提供了一种配置和管理调度器的方式,可以根据需要创建不同类型的调度器实例。

SchedulerFactory有两种常用的实现类:

  1. StdSchedulerFactory:这是Quartz框架的默认调度器工厂类。它使用quartz.properties文件作为配置文件,通过读取配置文件中的属性来创建调度器。

  2. RAMJobStore:这是一个简单的调度器工厂类,将所有任务和调度信息存储在内存中。它不需要配置文件,所有的配置信息都是在创建SchedulerFactory时通过代码进行设置。

? ? ?SchedulerFactory创建调度器的步骤几个步骤:

  1. 创建SchedulerFactory对象,可以使用默认的工厂类StdSchedulerFactory,也可以使用自定义的工厂类。

  2. 调用SchedulerFactory的getScheduler()方法来获取Scheduler实例。

  3. 配置Scheduler实例的属性,例如设置调度器的名称、线程池的大小等。

  4. 调用Scheduler的start()方法来启动调度器。

  5. 使用Scheduler的scheduleJob()方法来创建和配置定时任务。

  6. 调用Scheduler的shutdown()方法来停止调度器。

JobDataMap?

? ? ? JobDataMap是Quartz调度框架中的一个重要概念。它是一个存储作业(Job)相关数据的键值对容器,用于在作业调度过程中传递和存储作业的状态和参数。

? ? JobDataMap对象是org.quartz.JobExecutionContext接口中的一个属性,该接口是在作业(Job)执行时由Quartz框架自动创建和传递给作业(Job)的。

? ? ?JobDataMap对象允许将任意的数据对象附加到作业(Job)上,以便在作业(Job)执行时使用。它提供了以下几个常用的方法用于操作这些数据:

  • put(String key, Object value):将键值对存储到JobDataMap中。
  • remove(String key):从JobDataMap中移除指定的键值对。
  • get(String key):从JobDataMap中获取指定键对应的值。
  • containsKey(String key):判断JobDataMap中是否存在指定的键。
  • getKeys():返回JobDataMap中所有的键。

? ? ?JobDataMap可以存储任意类型的数据对象,包括基本数据类型、自定义对象、集合等。它可以用于传递作业(Job)的参数、作业状态以及其他业务相关的数据信息。

? ? 使用JobDataMap的一个典型示例是在创建作业(Job)时,将作业需要的参数传递给作业对象。例如,可以使用put方法将需要的参数存储到JobDataMap中,然后在作业的execute方法中通过get方法来获取参数并进行处理。

? ? 除了在创建作业时传递参数,JobDataMap还可以在Quartz框架的其它组件中使用,如作业监听器(JobListener)和触发器监听器(TriggerListener)等。在这些组件中,可以通过JobDataMap来共享和传递作业的状态和数据。

springboot整合quartz

? ? ?首先,您需要添加以下依赖到您的Spring Boot项目中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

接下来,按照以下步骤进行Quartz的整合:

  1. 创建Job类:首先,您需要创建一个继承自Quartz的Job类,用于定义具体的任务逻辑。例如,创建一个名为ExampleJob的类:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class ExampleJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 在这里定义具体的任务逻辑
    }

}

  1. 创建配置类:接下来,您需要创建一个配置类,用于配置Quartz实例和JobDetail。例如,创建一个名为QuartzConfig的类:
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean() {
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        factoryBean.setJobClass(ExampleJob.class);
        factoryBean.setDurability(true);
        return factoryBean;
    }

    @Bean
    public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetail jobDetail) {
        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
        factoryBean.setJobDetail(jobDetail);
        factoryBean.setRepeatInterval(10000); // 间隔时间,单位毫秒
        return factoryBean;
    }

}

在上述配置类中,我们使用JobDetailFactoryBeanSimpleTriggerFactoryBean创建了对应的Quartz的JobDetail和Trigger。

  1. 启用Quartz调度:最后,您需要在Spring Boot应用程序的入口类上添加@EnableScheduling注解,以启用Quartz调度功能。例如:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

文章来源:https://blog.csdn.net/Flying_Fish_roe/article/details/135513918
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。