Spring Quartz定时任务:如何从CronTriggerFactoryBean获取JobDetail?
Spring Quartz 组件升级后无法获取JobDetail的解决方案
核心差异说明
CronTriggerFactoryBean和JobDetailFactoryBean是Spring的FactoryBean接口实现类,和旧版直接继承Quartz原生类的CronTriggerBean、JobDetailBean定位完全不同:
- 旧版
CronTriggerBean本身就是QuartzCronTrigger的子类,可直接作为Trigger实例使用,内置JobDetail属性绑定 - 新版工厂类仅负责生成
CronTrigger、JobDetail实例,本身不具备Trigger/JobDetail的相关特性,不能直接当做Trigger实例操作
需要调整的配置与逻辑
1. 修正Bean依赖注入类型
不要注入List<CronTriggerFactoryBean>,直接注入工厂类生产的目标类型List<CronTrigger>即可,Spring会自动调用工厂类的getObject()方法返回实际的Trigger实例注入容器。
参考JavaConfig配置示例:
// 定义JobDetail @Bean public JobDetailFactoryBean sampleJobDetail() { JobDetailFactoryBean factory = new JobDetailFactoryBean(); factory.setJobClass(SampleTask.class); factory.setDurability(true); return factory; } // 定义CronTrigger,绑定对应JobDetail @Bean public CronTriggerFactoryBean sampleCronTrigger(JobDetail sampleJobDetail) { CronTriggerFactoryBean factory = new CronTriggerFactoryBean(); factory.setJobDetail(sampleJobDetail); // 必须显式绑定JobDetail,否则Trigger中不会携带对应信息 factory.setCronExpression("0 0/10 * * * ?"); return factory; }
2. 调整调度逻辑
将方法参数替换为CronTrigger列表即可直接调用getJobDetail()获取绑定的任务信息:
protected void scheduleJobs(List<CronTrigger> cronTriggers) { for (CronTrigger cronTrigger : cronTriggers) { JobDetail jobDetail = cronTrigger.getJobDetail(); try { scheduler.scheduleJob(jobDetail, cronTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } }
兼容写法(不推荐)
如果需要保留注入CronTriggerFactoryBean的原有逻辑,可手动调用工厂类的getObject()方法获取实际Trigger实例:
protected void scheduleJobs(List<CronTriggerFactoryBean> triggerFactories) { for (CronTriggerFactoryBean factory : triggerFactories) { CronTrigger cronTrigger = factory.getObject(); JobDetail jobDetail = cronTrigger.getJobDetail(); try { scheduler.scheduleJob(jobDetail, cronTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } }
常见遗漏检查
- 确认所有
CronTriggerFactoryBean的配置中都显式设置了jobDetail属性,未绑定的话Trigger实例中不会携带JobDetail信息 - 不要直接调用
CronTriggerFactoryBean类的getJobDetail()方法,该方法仅返回工厂类的配置属性值,不是最终Trigger实例绑定的JobDetail对象
内容的提问来源于stack exchange,提问作者headlikearock
相关产品推荐
相关产品推荐

