1.问题如标题所说
使用springboot + quartz + cron表达式形式触发任务 + mysql jdbc 数据源
出现的问题是 重启服务时无法修改数据库已有任务的cron表达式也就是任务触发频率无法修改
2.解决方案
1.增加yml配置项
需要在yml 中添加如下语句即可
spring:
quartz:
overwrite-existing-jobs: true # 是否覆盖已有 Job 的配置
2. 增加处理类
在项目代码中增加如下类 本质类似都是通过修改bean的overwirteexistingjobs属性进行覆盖
看注解能知道是在bean配置后自动调用该方法修改 其实代码中如果想要手动修改定时任务应该通过scheduler.rescheduleJob就可以进行修改 但是需要获取到scheduler
@Configuration
@AutoConfigureAfter(QuartzAutoConfiguration.class)
public class QuartzSupportConfig{
@Autowired(required = false)
private List<Trigger> triggers ;
@Autowired
SchedulerFactoryBean schedulerFactoryBean;
@PostConstruct
public void quartzScheduler() throws SchedulerException {
schedulerFactoryBean.setOverwriteExistingJobs(true);
if (triggers != null){
Scheduler scheduler = schedulerFactoryBean.getScheduler();
for (Trigger trigger : triggers){
scheduler.rescheduleJob(trigger.getKey(),trigger);
}
}
}
}
3. 问题
1.尝试通过手动注入schedulerFactory 进行修改已有trigger 但是始终无法在启动服务时获取到数据库已有trigger
相关代码如下:(这个是错误代码哈 如果有大佬发现问题感谢指出)
@Configuration
public class UserSchedulerConfig {
//这里用了两个数据源 这个使用了分片 但是定时任务使用的铍铜任务
@Lazy