升级到 Spring 4.1 由于移除了 JobDetailAwareTrigger 而破坏了 Quartz Persistence

Upgrading to Spring 4.1 Breaks Quartz Persistence due to removed JobDetailAwareTrigger

我正在从 Spring 3.2.x 升级到 Spring 4.1.x 并且正在使用 石英 2.2.1。我们动态创建作业并一直使用 this stackoverlow answer 中描述的解决方案来持久化它们。

该答案中的解决方案取决于 JobDetailAwareTrigger.JOB_DETAIL_KEY 定义的常量,但是由于为 Spring JIRA 11262 所做的工作,该接口已从代码库中删除,现在是我的代码不编译。

我调查了删除接口的 github commit,发现内部 Spring 代码现在在需要时直接引用 "jobDetail" 文字而不是常量。我是否应该效仿并创建我自己的在我的应用程序中定义的 jobDetail 常量,然后在我之前引用 JobDetailAwareTrigger.JOB_DETAIL_KEY 的任何地方引用它?如果我这样做,我现在是否让我的应用程序容易受到未来不太可能发生的 Spring 对 "jobDetail" 定义的更改的影响?

编辑:

我创建了自己的 final static String 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);
    }
}

如您所述,JobDetailAwareTrigger 在 Spring 4.0.9.RELEASE 之后不再存在。

我不认为你需要担心未来的 Spring 更改会在添加你自己的 'JOB_DETAIL_KEY' 后对你的项目带来任何伤害,因为 JobDataMap 在控制之下石英.