springboot项目动态跑批定时任务 读取数据库中的cron表达式
时间: 2023-05-30 19:06:32 浏览: 752
要实现SpringBoot项目动态跑批定时任务,可以使用Spring自带的定时任务框架,结合数据库中存储的cron表达式来实现。
具体步骤如下:
1.在pom.xml文件中引入spring-boot-starter-quartz和spring-boot-starter-jdbc依赖。
2.在application.properties或application.yml中配置数据库连接信息。
3.创建一个Job类,实现Quartz的Job接口,并实现execute方法,该方法就是定时任务要执行的业务逻辑。
4.创建一个JobDetail对象,表示一个具体的可执行的调度程序。
5.创建一个Trigger对象,表示触发Job执行的条件。
6.将JobDetail和Trigger注册到Scheduler中。
7.从数据库中读取cron表达式,更新Trigger的cron表达式。
8.启动Scheduler,定时任务即可开始执行。
示例代码如下:
1.依赖配置:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```
2.application.properties配置:
```
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# Quartz
spring.quartz.job-store-type=jdbc
```
3.Job类:
```
@Component
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 定时任务要执行的业务逻辑
System.out.println("定时任务执行了");
}
}
```
4.创建JobDetail和Trigger对象:
```
@Autowired
private MyJob myJob;
@Autowired
private Scheduler scheduler;
public void startJob() throws SchedulerException {
// 创建JobDetail对象
JobDetail jobDetail = JobBuilder.newJob(myJob.getClass())
.withIdentity("myJob", "group1")
.build();
// 创建Trigger对象
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) // 初始cron表达式
.build();
// 注册JobDetail和Trigger
scheduler.scheduleJob(jobDetail, trigger);
// 启动Scheduler
scheduler.start();
}
```
5.从数据库中读取cron表达式,更新Trigger的cron表达式:
```
public void updateTrigger(String cron) throws SchedulerException {
// 获取Trigger
TriggerKey triggerKey = TriggerKey.triggerKey("myTrigger", "group1");
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
// 更新cron表达式
trigger = trigger.getTriggerBuilder()
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.build();
// 重新注册Trigger
scheduler.rescheduleJob(triggerKey, trigger);
}
```
6.调用startJob方法启动定时任务,调用updateTrigger方法动态更新cron表达式即可。
注意事项:
1.定时任务的执行时间间隔不宜设置过短,避免对系统造成过大的负担。
2.更新cron表达式时需要先获取Trigger对象,然后重新构建Trigger对象并重新注册到Scheduler中。
阅读全文