Spring Boot是一个用于快速开发基于Spring框架的Java应用程序的框架。Quartz是一个强大的作业调度库,可以在指定的时间触发任务执行。在Spring Boot中,我们可以使用Quartz来实现动态添加任务的功能。下面我将详细介绍如何实现这一功能。

整体流程如下:

  1. 添加依赖:首先需要在项目的pom.xml文件中添加Quartz和Spring Boot的依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
  1. 创建Job类:创建一个继承自Quartz提供的Job类的任务类,实现具体的任务逻辑。
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;

@Component
public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 实现具体任务逻辑
        System.out.println("执行任务...");
    }
}
  1. 配置任务调度器:在Spring Boot的配置文件中配置Quartz的任务调度器。
@Configuration
public class QuartzConfig {
    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setApplicationContext(applicationContext);

        // 添加触发器
        schedulerFactoryBean.setTriggers(trigger1(), trigger2());

        return schedulerFactoryBean;
    }

    @Bean
    public JobDetailFactoryBean jobDetail1() {
        JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(MyJob.class);

        return jobDetailFactoryBean;
    }

    // 创建触发器
    @Bean
    public SimpleTriggerFactoryBean trigger1() {
        SimpleTriggerFactoryBean triggerFactoryBean = new SimpleTriggerFactoryBean();
        triggerFactoryBean.setJobDetail(jobDetail1().getObject());
        triggerFactoryBean.setStartDelay(0L); // 延迟0秒执行
        triggerFactoryBean.setRepeatInterval(5000L); // 每5秒执行一次

        return triggerFactoryBean;
    }

    @Bean
    public JobDetailFactoryBean jobDetail2() {
        JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(MyJob.class);

        return jobDetailFactoryBean;
    }

    // 创建触发器
    @Bean
    public CronTriggerFactoryBean trigger2() {
        CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
        triggerFactoryBean.setJobDetail(jobDetail2().getObject());
        triggerFactoryBean.setCronExpression("0 0 0/1 * * ?"); // 每小时执行一次

        return triggerFactoryBean;
    }
}
  1. 启动任务调度器:在Spring Boot的启动类中添加@EnableScheduling注解来启用任务调度器。
@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. 运行项目:启动Spring Boot项目,任务调度器将会自动执行任务。

以上就是实现"spring boot quartz 动态添加任务"的完整流程。通过上述步骤,我们可以动态添加不同类型的任务,并且可以根据需要设置任务的执行时间和频率。

下面是关系图和序列图的示意图:

关系图:

erDiagram
Job --> MyJob
QuartzConfig --> MyJob
QuartzConfig --> JobDetailFactoryBean
QuartzConfig --> SimpleTriggerFactoryBean
QuartzConfig --> CronTriggerFactoryBean

序列图:

sequenceDiagram
participant SchedulerFactoryBean
participant JobDetailFactoryBean
participant SimpleTriggerFactoryBean
participant CronTriggerFactoryBean
participant MyJob
participant QuartzConfig
SchedulerFactoryBean->>SimpleTriggerFactoryBean: 创建触发器
SimpleTriggerFactoryBean->>JobDetailFactoryBean: 获取任务详情
SimpleTriggerFactoryBean->>QuartzConfig: 获取任务详情
QuartzConfig->>MyJob: 创建任务
SchedulerFactoryBean->>CronTriggerFactoryBean: 创建触发器
CronTriggerFactoryBean->>JobDetailFactoryBean: 获取任务详情
CronTriggerFactoryBean->>QuartzConfig: 获取任务详情
QuartzConfig->>MyJob: 创建任务
SchedulerFactoryBean->>QuartzConfig: 添加触发器

希望通过这篇文章,你能够了解到如何使用Spring Boot和Quartz