有什么方法可以将参数传递给石英cron作业吗



我在quartz(spring-boot应用程序(中有一个cron作业。我已经为调度器、触发器、cron作业和所有其他bean创建了bean。作业的目的是基于指定的cron表达式运行。但是,对于作业的每次新执行,我都希望将一些特定于该作业的数据传递给作业详细信息对象。但目前,当我试图在JobDetailFactory bean中传递这样的数据时,它只创建了一次(第一次(,对于作业的所有进一步执行,都会传递相同的陈旧数据。我想在每次执行作业时传递新的数据。我怎样才能做到这一点?

也许您可以使用某种回调?所以在你的Job:中有这样的东西

@Resource
private MyJobJobdataProvider dataProvider;
public void execute(JobExecutionContext context) throws JobExecutionException {
JobData data = dataProvider.getData();
/// configure job with the data before actual exection ...
}

其中MyJobJobdataProvider将是提供该数据的任何组件:

@Component
public MyJobJobdataProvider {
public Data getData() {
//...
}
public void setData(Data data) {
//...
}
}

因此,尝试设置新数据时,请让作业在每次执行之前进行查询。

这就是作业数据映射的用途。请检查JobExecutionContext.getMergedJobDataMap((方法和JobDataMap API。

如果您想在运行时以编程方式修改作业数据映射参数,您有两个选项:

  1. 获取Scheduler引用,例如在JobExecutionContext.getScheduler((方法中,并修改任何作业的所需作业数据映射参数。遗憾的是,Quartz API没有提供更新作业详细信息的方法,因此如果您希望修改现有作业,则必须删除作业详细信息并添加新作业。

  2. 让您的作业实现StatefulJob接口。这使得Quartz在作业执行完成时自动保持作业数据映射。例如,这可以用于在上一个作业执行完成后从特定点恢复数据处理。

最新更新