我有一个大型 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 发生变化时才保存?
[Test]
public void AddAndRemoveSetsDirty()
{
var map = new JobDataMap();
map["foo"] = 1;
map.Remove("foo");
map.Count.Should().Be(0);
map.Dirty.Should().BeTrue();
}