如何在每次运行时保存作业数据,而不仅仅是在发生更改时保存作业数据?

问题描述 投票:0回答:1

我有一个大型 Quartz 数据库,它全面使用二进制序列化。 我想将 JB 中的所有内容迁移到 JSON 序列化,并且我使用示例 here 作为指南。

我启动 quarts 并配置持久作业存储以使用自定义序列化器。 它加载我所有的 blob_triggers 并使用 JSON 将它们重新序列化回数据库,但即使它触发了作业,它也不会以 JSON 格式重新保留 jobdata 列。

为了让 Quartz 将 JobData 重新写入

QUARTZ_JOB_DETAILS
表中的数据库,我必须在
context.JobDetail.JobDataMap
中更改一些内容。 这就是我正在做的事情:

    [PersistJobDataAfterExecution]
    [DisallowConcurrentExecution]
    [Serializable]
    public class MigrationJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            var jobData = context.JobDetail.JobDataMap;
            var now = DateTimeOffset.Now;
            jobData["MigratedAt"] = now; // without this line, the data doesn't re-persist
            Console.WriteLine("{0} migrated at at {1}", context.JobDetail.Key.Name, now);
        }
    }

有没有办法告诉quartz“始终”保留作业数据,而不是仅在 JobDetails 发生变化时才保存?

c# sql-server serialization quartz.net
1个回答
0
投票

[Test] public void AddAndRemoveSetsDirty() { var map = new JobDataMap(); map["foo"] = 1; map.Remove("foo"); map.Count.Should().Be(0); map.Dirty.Should().BeTrue(); }

	
© www.soinside.com 2019 - 2024. All rights reserved.