SpringBoot 使用quartz实现动态定时任务完美案例
时间: 2024-05-03 17:01:53 浏览: 150
Spring Boot 集成 Quartz 实现动态定时任务非常方便,下面是一个简单的示例:
首先,我们需要引入 Quartz 的依赖:
```xml
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.1</version>
</dependency>
```
然后,创建一个配置类,用于配置 Quartz:
```java
@Configuration
public class QuartzConfig {
// 配置 JobDetail
@Bean
public JobDetail testJobDetail() {
return JobBuilder.newJob(TestJob.class)
.withIdentity("testJob")
.storeDurably()
.build();
}
// 配置 Trigger
@Bean
public Trigger testJobTrigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(10)
.repeatForever();
return TriggerBuilder.newTrigger()
.forJob(testJobDetail())
.withIdentity("testJobTrigger")
.withSchedule(scheduleBuilder)
.build();
}
// 配置 Scheduler
@Bean
public Scheduler scheduler() throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(testJobDetail(), testJobTrigger());
scheduler.start();
return scheduler;
}
}
```
上述代码中,我们配置了一个 `JobDetail` 和一个 `Trigger`,然后创建了一个 `Scheduler` 实例,并将 `JobDetail` 和 `Trigger` 添加到调度器中。
接下来,我们创建一个简单的 Job 类,并实现 `execute()` 方法:
```java
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("TestJob执行,时间:" + LocalDateTime.now());
}
}
```
最后,我们启动应用程序,就可以看到定时任务每隔 10 秒钟执行一次了。
如果我们想要动态修改定时任务的执行时间,可以使用 `Scheduler` 的相关 API 进行修改,例如:
```java
public void updateTrigger(String triggerName, String triggerGroupName, String cronExpression) throws SchedulerException {
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
scheduler.rescheduleJob(triggerKey, trigger);
}
```
上述代码中,我们使用 `rescheduleJob()` 方法来重新调度定时任务,从而实现动态修改定时任务的执行时间。
以上就是一个简单的使用 Spring Boot 集成 Quartz 实现动态定时任务的完整示例。
阅读全文