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

时间:2015-02-18 17:36:50

标签: spring quartz-scheduler spring-4

我正在从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”定义的影响?

修改

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

1 个答案:

答案 0 :(得分:2)

正如您所提到的,{4.0}之后JobDetailAwareTrigger已不复存在.RELEASE。

我认为您不必担心将来添加自己的'JOB_DETAIL_KEY'后,Spring更改会对您的项目造成任何伤害,因为JobDataMap受石英控制。