springboot根据数据库信息自动创建多个定时任务并可以监听数据库配置改变定时任务的配置使用ScheduleExcutor
在Spring Boot中使用ScheduleExecutor来创建多个定时任务,并监听数据库配置的改变,可以按照以下步骤进行操作:
- 引入依赖:在
pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
- 创建定时任务类:创建一个继承自
QuartzJobBean的定时任务类,例如:
public class MyJob extends QuartzJobBean {
private static final Logger LOGGER = LoggerFactory.getLogger(MyJob.class);
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
LOGGER.info("定时任务执行中...");
// 执行任务逻辑
}
}
- 创建定时任务配置类:创建一个配置类,用于配置定时任务的触发器和执行任务的类,例如:
@Configuration
public class ScheduleConfig {
@Autowired
private DataSource dataSource;
@Autowired
private ApplicationContext applicationContext;
@Bean
public JobDetail myJobDetail() {
return JobBuilder.newJob(MyJob.class)
.withIdentity("myJob")
.storeDurably()
.build();
}
@Bean
public Trigger myJobTrigger() {
return TriggerBuilder.newTrigger()
.forJob(myJobDetail())
.withIdentity("myJobTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/10 * * * ?")) // 每10分钟执行一次
.build();
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setJobFactory(springBeanJobFactory());
factory.setDataSource(dataSource);
factory.setApplicationContext(applicationContext);
factory.setTriggers(myJobTrigger());
return factory;
}
@Bean
public SpringBeanJobFactory springBeanJobFactory() {
return new AutowiringSpringBeanJobFactory();
}
}
- 创建定时任务监听器类:创建一个实现
ApplicationListener接口的监听器类,用于监听数据库配置的改变,例如:
@Component
public class DatabaseConfigListener implements ApplicationListener<ApplicationReadyEvent> {
private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseConfigListener.class);
@Autowired
private SchedulerFactoryBean schedulerFactoryBean;
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
try {
Scheduler scheduler = schedulerFactoryBean.getScheduler();
scheduler.clear();
// 重新设置触发器
scheduler.scheduleJob(myJobTrigger());
scheduler.start();
} catch (SchedulerException e) {
LOGGER.error("定时任务启动失败", e);
}
}
}
- 配置数据库信息:在
application.properties或application.yml文件中配置数据库信息,例如:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
以上步骤完成后,Spring Boot将会根据数据库配置信息自动创建多个定时任务,并且可以监听数据库配置的改变来动态修改定时任务的配置
原文地址: https://www.cveoy.top/t/topic/iYs4 著作权归作者所有。请勿转载和采集!