在spring boot 中动态增加、删除、启动、停止定时任务
时间: 2023-07-10 22:21:15 浏览: 57
在 Spring Boot 中动态增加、删除、启动、停止定时任务可以通过 `ScheduledTaskRegistrar` 和 `CronTask` 来实现。
首先,我们需要在应用程序中定义一个 `ScheduledTaskRegistrar` 组件,用于管理定时任务。然后,我们可以通过 `addCronTask` 方法向 `ScheduledTaskRegistrar` 中添加定时任务,通过 `removeCronTask` 方法从 `ScheduledTaskRegistrar` 中删除定时任务。同时,我们可以通过 `scheduledTasks` 方法获取当前所有的定时任务,并通过 `scheduledTask` 方法获取指定的定时任务,然后通过 `enable` 和 `disable` 方法启动和停止定时任务。
下面是一个简单的示例:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.config.CronTask;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
@Configuration
public class ScheduledTaskConfiguration {
@Autowired
private TaskScheduler taskScheduler;
private ScheduledTaskRegistrar scheduledTaskRegistrar;
public ScheduledTaskConfiguration() {
scheduledTaskRegistrar = new ScheduledTaskRegistrar();
}
public void addCronTask(Runnable task, String cronExpression) {
scheduledTaskRegistrar.addCronTask(new CronTask(task, cronExpression));
scheduledTaskRegistrar.setTaskScheduler(taskScheduler);
}
public void removeCronTask(Runnable task) {
scheduledTaskRegistrar.removeCronTask(new CronTask(task));
}
public void enableCronTask(Runnable task) {
scheduledTaskRegistrar.getScheduledTasks().stream()
.filter(scheduledTask -> scheduledTask.getTask().equals(task))
.findFirst()
.ifPresent(scheduledTask -> scheduledTaskRegistrar.scheduleCronTask(scheduledTask.getCronTask()));
}
public void disableCronTask(Runnable task) {
scheduledTaskRegistrar.getScheduledTasks().stream()
.filter(scheduledTask -> scheduledTask.getTask().equals(task))
.findFirst()
.ifPresent(scheduledTask -> scheduledTaskRegistrar.removeScheduledTask(scheduledTask));
}
public ScheduledTaskRegistrar getScheduledTaskRegistrar() {
return scheduledTaskRegistrar;
}
}
```
在上面的例子中,我们定义了一个名为 `ScheduledTaskConfiguration` 的组件,并在该组件中定义了 `ScheduledTaskRegistrar` 实例,用于管理定时任务。然后我们通过 `addCronTask` 方法向 `ScheduledTaskRegistrar` 中添加定时任务,通过 `removeCronTask` 方法从 `ScheduledTaskRegistrar` 中删除定时任务。同时,我们通过 `enableCronTask` 和 `disableCronTask` 方法启动和停止定时任务。
使用该组件时,我们只需要注入 `ScheduledTaskConfiguration` 组件,并调用对应的方法即可。例如,添加一个定时任务:
```java
@Autowired
private ScheduledTaskConfiguration scheduledTaskConfiguration;
@PostConstruct
public void init() {
scheduledTaskConfiguration.addCronTask(() -> {
// do something
}, "0 0/5 * * * ?");
}
```
这将会在启动应用程序后,每隔 5 分钟执行一次指定的任务。如果想要删除该定时任务,可以调用 `removeCronTask` 方法,如果想要停止该定时任务,可以调用 `disableCronTask` 方法。