Java Spring Boot Quartz 启动先执行

引言

在Java Spring Boot应用程序中,Quartz是一个强大的定时任务调度框架。有时候我们希望在应用程序启动后立即执行定时任务,然而,Quartz默认是在应用程序启动后延迟一段时间后再执行任务。本文将教你如何实现在Java Spring Boot中启动先执行的功能。

整体流程

下表展示了实现“Java Spring Boot Quartz 启动先执行”的整体流程和步骤:

步骤 描述
1 创建Spring Boot项目
2 配置Quartz依赖
3 创建一个继承自QuartzJobBean的Job类
4 创建一个继承自Trigger的Trigger类
5 在启动类中配置并启动Quartz Scheduler
6 配置定时任务执行策略
7 运行应用程序并验证结果

接下来,我们将逐步详细说明每一个步骤和需要做的事情。

步骤1:创建Spring Boot项目

首先,我们需要创建一个Spring Boot项目。你可以使用任何你喜欢的IDE或者使用Spring Initializr来创建项目。确保你的项目中包含了以下依赖:

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

步骤2:配置Quartz依赖

application.properties文件中添加以下配置:

spring.quartz.job-store-type=jdbc

这将告诉Quartz使用数据库作为job存储。

步骤3:创建一个继承自QuartzJobBean的Job类

创建一个继承自QuartzJobBean的Job类,例如MyJob。该类将用于定义你的定时任务的执行逻辑。

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class MyJob extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        // 在这里编写你的定时任务逻辑
    }
}

步骤4:创建一个继承自Trigger的Trigger类

创建一个继承自Trigger的Trigger类,例如ImmediateTrigger。该类将用于定义任务触发条件,使任务能够在应用程序启动后立即执行。

import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.spi.OperableTrigger;

public class ImmediateTrigger implements Trigger {

    @Override
    public Date getNextFireTime() {
        return new Date();
    }

    // 其他Trigger接口的方法
}

步骤5:在启动类中配置并启动Quartz Scheduler

在你的Spring Boot应用程序的启动类中,配置并启动Quartz Scheduler。在此之前,确保你已经创建了一个SchedulerFactoryBean的bean。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@SpringBootApplication
public class MyApplication {

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

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        // 在这里配置Quartz Scheduler的属性,例如数据源配置等
        return schedulerFactoryBean;
    }
}

步骤6:配置定时任务执行策略

在你的Spring Boot应用程序的配置类中,配置定时任务执行策略。通过CronTriggerFactoryBean来配置cron表达式。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;

@Configuration
public class QuartzConfig {

    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean() {
        CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
        cronTriggerFactoryBean.setJobDetail(myJobDetail().getObject());
        cronTriggerFactoryBean.setCronExpression("0 0/1 * * * ?"); // 每分钟触发一次
        return cronTriggerFactoryBean;
    }

    @Bean