使用Quartz的动态作业数据

can*_*ado 3 java spring quartz-scheduler

当我的进程收到消息时,它需要启动一个计时器并在X秒内执行一些逻辑.这些作业需要存储在JDBC存储中,据我所知,这可能与此问题无关.

根据我读过的内容,我应该能够为一个Job类分配一个具有不同类似属性值的JobDataMap,但是我无法找到任何文档或示例来支持这个用例.也许我的Google-fu很弱.

那有意义吗?有一个Job类,并以某种方式存储JobDataMap来填充该Job类并在每个消息的基础上运行它?

Uri*_*ter 7

org.quartz.Trigger有两个getJobDataMap()(new必要时会增加一个)并 setJobDataMap()获得触发器的JobDataMap.

最简单的用法是:

Trigger t = new SimpleTrigger(...);
t.getJobDataMap().put("foo", "bar");
Run Code Online (Sandbox Code Playgroud)

要使用现有的值映射进行初始化:

Map data = new HashMap();
data.put("foo", "bar");

t.setJobDataMap(new JobDataMap(data));
Run Code Online (Sandbox Code Playgroud)

在作业执行时获取数据

public void execute(JobExecutionContext context) throws JobExecutionException
{
   String fooValue = context.getMergedJobDataMap().get("foo");
}
Run Code Online (Sandbox Code Playgroud)

本教程中有关JobDataMap的文档.