Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java quartz动态添加删除任务


在 Java 中使用 Quartz 实现动态添加和删除任务,你可以采用以下几种方式:使用 JobDetailTrigger 、使用 CronTriggerFactoryBean 、使用 SchedulerFactoryBean

以下是每种方式的详细步骤、代码示例和相关依赖坐标:

使用 JobDetail 和 Trigger

步骤流程:

  1. 创建一个实现 Job 接口的任务类,其中实现 execute 方法定义具体任务逻辑。
  2. 创建 JobDetail 实例,将任务类与其绑定。
  3. 创建 Trigger 实例,设置触发任务的时间规则。
  4. 创建 Scheduler 实例,将 JobDetailTrigger 添加到调度器中。

Maven 依赖:

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

Gradle 依赖:

implementation 'org.quartz-scheduler:quartz:2.3.2'

示例代码:

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzDynamicAddDelete {

    public static void main(String[] args) throws SchedulerException, InterruptedException {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();

        // Create JobDetail
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "group1")
                .build();

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

        // Schedule the job
        scheduler.scheduleJob(jobDetail, trigger);

        // Wait for a while
        Thread.sleep(30000);

        // Delete the job
        scheduler.deleteJob(jobDetail.getKey());

        scheduler.shutdown();
    }
}

class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Executing job at: " + new Date());
    }
}

使用 CronTriggerFactoryBean

步骤流程:

  1. 创建一个实现 Job 接口的任务类。
  2. 配置 Spring 配置文件,定义 CronTriggerFactoryBeanJobDetailFactoryBean,并将它们与任务类绑定。

Maven 依赖:

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

Gradle 依赖:

implementation 'org.springframework.boot:spring-boot-starter-quartz'

示例代码:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Executing job at: " + new Date());
    }
}

Spring 配置文件 application.propertiesapplication.yml

spring.quartz.job-store-type=jdbc
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetailFactoryBean jobDetail() {
        JobDetailFactoryBean factory = new JobDetailFactoryBean();
        factory.setJobClass(MyJob.class);
        factory.setGroup("group1");
        return factory;
    }

    @Bean
    public CronTriggerFactoryBean cronTrigger(JobDetailFactoryBean jobDetail) {
        CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
        factory.setJobDetail(jobDetail.getObject());
        factory.setStartDelay(0L);
        factory.setName("myTrigger");
        factory.setGroup("group1");
        factory.setCronExpression("0/10 * * * * ?");
        return factory;
    }
}

使用 SchedulerFactoryBean

步骤流程:

  1. 创建一个实现 Job 接口的任务类。
  2. 配置 Spring 配置文件,定义 SchedulerFactoryBean,并在其中设置触发器和任务。

Maven 依赖和示例代码同上一种方式。

Spring 配置文件 application.propertiesapplication.yml

spring.quartz.job-store-type=jdbc
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class QuartzConfig {

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
        schedulerFactory.setTriggers(cronTrigger().getObject());
        return schedulerFactory;
    }

    @Bean
    public CronTriggerFactoryBean cronTrigger() {
        CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
        factory.setJobDetail(jobDetail().getObject());
        factory.setStartDelay(0L);
        factory.setName("myTrigger");
        factory.setGroup("group1");
        factory.setCronExpression("0/10 * * * * ?");
        return factory;
    }

    @Bean
    public JobDetailFactoryBean jobDetail() {
        JobDetailFactoryBean factory = new JobDetailFactoryBean();
        factory.setJobClass(MyJob.class);
        factory.setGroup("group1");
        return factory;
    }
}

请注意,以上示例中的 Spring 相关配置假定你正在使用 Spring 框架。这些示例仅仅是基础示例,实际使用时可能需要根据业务逻辑和需求进行适当的调整。

###方式一:通过修改JobDetail的Cron表达式添加Maven依赖(Quartz):创建一个Job类:创建QuartzSchedul ...
假设我们要操作的数组是一个整型数组`int[]arr`,要添加的元素是整数`newElement`。Maven依赖:Gradle依赖:### ...
动态生成DjangoForm的实现方式使用动态表单类使用动态表单类是一种常见的方式,它允许在运行时动态地生成表单类,根据需要添加字段和验证规 ...
下面我将介绍一些常见的实现方式,并附上相关的示例代码和可能的第三方库依赖坐标(Maven和Gradle)。示例代码:###第三方库依赖坐标如 ...
以下是几种实现方式以及相应的步骤流程,包括使用第三方库的示例代码:###使用ArrayList`ArrayList`是Java标准库中的一个 ...