所以我有一个技术挑战我需要帮助。
一个大规模的项目是使用Quartz调度程序来安排一项任务,每天晚上9点运行。
然而,计划中的作业需要从属性文件中读取值,使用自动配线等方式获取一些bean。
当我使用@Au牛毛和@Value注释时,我发现这些值为null。
问题是Quartz在spring容器之外使用newJob()
创建newJob()
对象。如下面的代码所示。
JobKey jobKey = new JobKey("NightJob", "9-PM Job");
JobDetail jobDetail = newJob(NightJob.class).withIdentity(jobKey)
.usingJobData("Job-Id", "1")
.build();
因此,包装jobDetail
的NightJob
对象不能使用spring访问属性文件或bean。
这是我的NightJob
课
public class NightJob implements Job{
//@Value to read from property file; here
//@Autowired to use some beans; here
@Override
public void execute(JobExecutionContext context) throws JobExecutionException{
}
}
我扫描了Stack溢出并列出了几种解决方案。我还阅读了评论,并列出了顶部的反评论。
建议1:由于与Spring的良好集成,摆脱了Quartz,使用了Spring批处理 计数器参数1: Spring批处理对于简单任务来说是过分的。使用@调度 建议2:使用spring提供的@调度注释和cron表达式 计数器参数2:如果移除Quartz,您的应用程序将无法在未来就绪。将来可能需要复杂的日程安排。 建议3 :使用spring接口ApplicationContextAware。 反参数3:大量的附加代码。挫败了Spring这个简单易用的概念
在Spring中是否有一种更简单的方法来访问实现Quartz作业的类中的属性值和自动线程对象(在这种情况下,是NightJob
类)
发布于 2018-06-30 17:43:01
正如注释中所写的,Spring通过提供setter方法:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-quartz.html,支持向Quartz作业中注入bean。
https://stackoverflow.com/questions/51116396
复制相似问题