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