利用Spring中的SchedulingConfigurer实现数据库配置化定时任务
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.context.annotation.Bean;
@Configuration
public class DatabaseDrivenScheduler implements SchedulingConfigurer {
// 假设这是从数据库读取的定时任务的触发表达式
private String cronExpressionFromDatabase = "0 * * * * *";
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
taskRegistrar.addTriggerTask(
// 定义执行的任务内容
() -> System.out.println("执行数据库配置的定时任务。"),
// 定义执行的触发时机
triggerContext -> new CronTrigger(cronExpressionFromDatabase).nextExecutionTime(triggerContext)
);
}
// 使用TaskExecutor来异步执行定时任务
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(5);
}
}
这个代码实例展示了如何从数据库读取定时任务的触发表达式并实现动态定时任务的配置。在configureTasks
方法中,我们设置了一个定时任务,并通过数据库读取的cron表达式来计算下一次执行时间。同时,我们还定义了一个异步执行任务的TaskExecutor
。这个例子简洁地展示了如何将Spring定时任务配置化,并且可以从数据库动态获取配置信息。
评论已关闭