gpt4 book ai didi

quartz-scheduler - 如何持久化来自远程客户端的 JobDataMap 更改

转载 作者:行者123 更新时间:2023-12-04 08:36:08 27 4
gpt4 key购买 nike

我正在为 Quartz.NET 开发一个基本的 Web 客户端,它支持在运行时修改作业的 JobDataMap。

我的工作装饰有以下属性,我认为这些属性是使工作有状态所必需的:

[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class SampleTenantJob : IJob { ... }

在运行时,我执行以下代码但 JobDataMap 没有持久化:
    public void UpdateJobProperties(string jobName, string groupName, IDictionary<string, object> properties)
{
IJobDetail job;
if (!TryGetJob(jobName, groupName, out job))
return;

foreach (var property in properties)
{
if (job.JobDataMap.ContainsKey(property.Key) && property.Value != null)
{
job.JobDataMap.Put(property.Key, property.Value);
}
}
}

我最初以为这是因为我正在使用 XMLSchedulingDataProcessorPlugin用于工作,但我已经尝试了内存 (RAMStore) 和 AdoJobStore还是坚持不下去 JobDataMap远程客户端所做的更改。

最佳答案

PersistJobDataAfterExecution(顾名思义)仅在作业执行完毕时生效,因此以下作业将跟踪其执行次数

[PersistJobDataAfterExecution]
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
int count = (int?) context.MergedJobDataMap["Count"] ?? 1;

Console.WriteLine("hello " + count.ToString() );

context.JobDetail.JobDataMap.Put("Count" , ++count);
}
}

如果没有 PersistJobDataAfterExecution 属性,计数始终相同。

由于您没有运行该作业,因此这对您没有帮助,我认为您必须使用新的 JobDataMap 删除并重新创建该作业。

当然,您不会被迫使用 JobDataMap,并且始终可以从其他地方读取和存储您的工作信息。

关于quartz-scheduler - 如何持久化来自远程客户端的 JobDataMap 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com