由于删除了JobDetailAwareTrigger,升级到Spring 4.1中断了Quartz Persistence

我正在从
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的控制.

点赞