我在quartz(springboot应用程序)中有一个cron工作。我已经为调度器、触发器、cron作业和所有其他bean创建了bean。作业的目的是基于指定的cron表达式运行。但是对于每一个新的作业执行,我想传递一些特定于该作业的数据,给job detail对象。但目前,当我尝试在jobDetailFactoryBean中传递此类数据时,它只创建了一次(第一次),对于作业的所有后续执行,都会传递相同的过时数据。每次执行作业时,我都要传递新的数据。我怎样才能做到这一点?
我在quartz(springboot应用程序)中有一个cron工作。我已经为调度器、触发器、cron作业和所有其他bean创建了bean。作业的目的是基于指定的cron表达式运行。但是对于每一个新的作业执行,我想传递一些特定于该作业的数据,给job detail对象。但目前,当我尝试在jobDetailFactoryBean中传递此类数据时,它只创建了一次(第一次),对于作业的所有后续执行,都会传递相同的过时数据。每次执行作业时,我都要传递新的数据。我怎样才能做到这一点?
2条答案
按热度按时间ql3eal8s1#
也许你可以打个电话?所以在你的大脑里
Job
:哪里
MyJobJobdataProvider
将是提供以下数据的任何组件:因此,与其尝试设置新数据,不如让作业在每次执行之前查询它。
amrnrhlw2#
这就是作业数据Map的用途。请检查jobexecutioncontext.getmergedjobdatamap()方法和jobdatamap api。
如果要在运行时以编程方式修改作业数据Map参数,有两个选项:
获取调度程序引用,例如在jobexecutioncontext.getscheduler()方法中,并修改任何作业的所需作业数据Map参数。不幸的是,quartz api没有提供更新作业详细信息的方法,因此如果您希望修改现有作业,则必须删除作业详细信息并添加新的作业详细信息。
让作业实现statefuljob接口。这使得quartz在作业执行完成时自动持久化作业数据Map。例如,这可以用于在上一个作业执行在某个点完成后,从该点恢复对数据的处理。