我正在从
Spring 3.2.x升级到Spring 4.1.x并使用Quartz 2.2.1.我们动态创建作业,并使用
this stackoverlow answer中描述的解决方案持久保存作业.
该答案中的解决方案取决于JobDetailAwareTrigger.JOB_DETAIL_KEY定义的常量,但是由于Spring JIRA 11262完成的工作,该接口已从代码库中删除,现在我的代码无法编译.
我研究了删除接口的github commit,发现内部Spring代码现在直接引用“jobDetail”文字,而不是常量.我是否应该效仿并创建我自己的jobDetail常量,该常量在我的应用程序中定义,然后引用我以前引用JobDetailAwareTrigger.JOB_DETAIL_KEY的所有地方?如果我这样做,我现在是否正在使我的应用程序易受未来不太可能的Spring更改为“jobDetail”的定义?
编辑:
我创建了自己的最终静态字符串JOB_DETAIL_KEY =“jobDetail”常量,以便在我的代码中使用,并且所有内容都可以使用该更改.我仍然对定义从Spring代码内部使用的值中提取的常量感到不安
public interface JobService {
public static final String JOB_DETAIL_KEY = "jobDetail";
....
}
public class PersistableCronTriggerFactoryBean extends CronTriggerFactoryBean {
@Override
public void afterPropertiesSet() throws ParseException {
//We run everything on UTC.
setTimeZone(DateTimeZone.UTC.toTimeZone());
super.afterPropertiesSet();
//Remove the JobDetail element
//Note that Quartz useProperties is set to true
getJobDataMap().remove(JobService.JOB_DETAIL_KEY);
}
}
最佳答案 正如您所提到的,在Spring 4.0.9.RELEASE之后,JobDetailAwareTrigger不再存在.
我不认为您需要担心将来的Spring更改会在添加您自己的’JOB_DETAIL_KEY’后对您的项目造成任何伤害,因为JobDataMap受到quartz的控制.