1. 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2. 逻辑说明
- 在容器(TaskContext)中每隔N秒扫描数据库中的任务配置
- 根据配置生成任务。任务不存在则创建;存在则更新
主要的文件如下:
| 文件名 | 功能 |
| TaskConfig |
生成scheduler,并将其注入到spring容器中 |
| MyJobFactory |
TaskConfig所依赖 |
| QuartzManager |
封装了定时任务的操作 |
| TaskContext |
任务容器,主要是定时扫描任务配置,并生成/更新任务 |
| TaskMapper |
配置查询(Mybatis) |
3. 源码
3.1 MyJobFactory
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
/**
* @author pp_lan
* @date 2024/1/2
*/
@Component
public class MyJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
// 注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
3.2 TaskConfig
import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
/**
* @author pp_lan
* @date 2024/1/2
*/
@Configuration
@Depends

最低0.47元/天 解锁文章
2336






