有没有办法把参数传递给quartz cron作业?

a6b3iqyw  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(383)

我在quartz(springboot应用程序)中有一个cron工作。我已经为调度器、触发器、cron作业和所有其他bean创建了bean。作业的目的是基于指定的cron表达式运行。但是对于每一个新的作业执行,我想传递一些特定于该作业的数据,给job detail对象。但目前,当我尝试在jobDetailFactoryBean中传递此类数据时,它只创建了一次(第一次),对于作业的所有后续执行,都会传递相同的过时数据。每次执行作业时,我都要传递新的数据。我怎样才能做到这一点?

ql3eal8s

ql3eal8s1#

也许你可以打个电话?所以在你的大脑里 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) {
        //...
    }
}

因此,与其尝试设置新数据,不如让作业在每次执行之前查询它。

amrnrhlw

amrnrhlw2#

这就是作业数据Map的用途。请检查jobexecutioncontext.getmergedjobdatamap()方法和jobdatamap api。
如果要在运行时以编程方式修改作业数据Map参数,有两个选项:
获取调度程序引用,例如在jobexecutioncontext.getscheduler()方法中,并修改任何作业的所需作业数据Map参数。不幸的是,quartz api没有提供更新作业详细信息的方法,因此如果您希望修改现有作业,则必须删除作业详细信息并添加新的作业详细信息。
让作业实现statefuljob接口。这使得quartz在作业执行完成时自动持久化作业数据Map。例如,这可以用于在上一个作业执行在某个点完成后,从该点恢复对数据的处理。

相关问题