引言
Quartz Scheduler是一个功能丰富的开源作业调度库,它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析:
- 官网地址:https://www.quartz-scheduler.org/
- w3cschool 官方文档:
https://www.w3cschool.cn/quartz_doc/
一、核心概念
Quartz Scheduler的核心概念主要包括三个部分:
- Job:表示被调度的任务,需要实现org.quartz.Job接口中的execute方法。
void execute(JobExecutionContext context)
- JobDetail,用于设置任务的属性,如任务的名称、组名、任务类、任务数据等。
- Trigger:表示触发器,用于定义任务执行的时间规则。Quartz提供了两种主要的触发器类型:
SimpleTrigger
和CronTrigger
。SimpleTrigger
用于在特定时间后开始执行
,并以一定的重复间隔执行。CronTrigger
则基于Cron表达式
,提供了更复杂的时间调度能力。 - Scheduler:调度器,是Quartz框架的心脏,负责基于Trigger设定的时间来执行Job。它管理着所有的Job和Trigger,确保它们能够按照预定的计划执行。
二、Springboot 集成 quartz
1. 创建一个新的 Spring Boot 项目,添加 Quartz 依赖到 pom.xml 文件中:
<dependencies>
<!-- 其他依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
</dependencies>
2. Quartz 配置
在 Spring Boot 应用中配置 Quartz,主要涉及到配置类和任务的创建。
(1)配置类
创建一个配置类,用于配置 Quartz 的相关属性:
@Configuration
public class QuartzConfig {
@Bean
public JobStore jobStore(DataSource dataSource) {
JDBCJobStoreFactoryBean factory = new JDBCJobStoreFactoryBean();
factory.setDataSource(dataSource);
factory.setTablePrefix("QRTZ_");
return factory.getObject();
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setJobStore(jobStore(dataSource));
// 可以设置其他属性,如线程池大小等
return factory;
}
// 省略其他配置...
}
(2)任务和触发器
定义一个任务,实现 Job 接口,并创建触发器来触发任务:
@Component
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) {
// 任务逻辑
System.out.println("执行任务:" + new Date());
}
}
创建触发器和作业详情,并注册到调度器:
@Service
public class JobService {
@Autowired
private Scheduler scheduler;
@PostConstruct
public void init() throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity("myJob", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) // 每10秒执行一次
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
}
实战演练
启动 Spring Boot 应用
运行 Spring Boot 应用的主类,应用将启动并初始化 Quartz,开始执行定时任务。
验证任务执行
观察控制台输出,你将看到任务按照预定的计划执行,并打印出执行的时间。
参考文献:
- https://www.cnblogs.com/muxi0407/p/11969119.html