当前位置: 首页 > article >正文

Quartz_将持久化配置写在appsettings.json中

准备工作详见:

Quartz.Net_持久化-CSDN博客


持久化配置: 

"Quartz": {
  "quartz.scheduler.instanceName": "MyScheduler",
  "quartz.jobStore.type": "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
  "quartz.jobStore.dataSource": "ABC",
  "quartz.jobStore.driverDelegateType": "Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz",
  "quartz.jobStore.useProperties": "true",
  "quartz.jobStore.tablePrefix": "QRTZ_",
  "quartz.dataSource.ABC.connectionString": "server=localhost;Database=quartz;user id=root;password=123456;SslMode=none;allowPublicKeyRetrieval=true;",
  "quartz.dataSource.ABC.provider": "MySql",
  "quartz.serializer.type": "json"
}

此处仅作示例,依据实际情况进行修改 

注:需要说明的是,详细配置不可写成对象的形式,必需以XXX.YYY.ZZZ的形式书写

Programs.cs

说明详见注释

// 将配置绑定至QuartzOptions(他处需要QuartzOptions时)
// builder.Services.Configure<QuartzOptions>(builder.Configuration.GetSection("Quartz"));

// Quartz配置
builder.Services.AddQuartz(q =>
{
    // 该函数在可能在未来被移除(高版本中默认使用微软的依赖注入)
    //q.UseMicrosoftDependencyInjectionJobFactory();

    q.UsePersistentStore(options =>
    {
        // 将配置绑定至options
        builder.Configuration.GetSection("Quartz").Bind(options);
    });

    // 可在此处添加Job和Trigger(未调用StoreDurably()也会被持久化)
    var jobKey = new JobKey("Job");
    q.AddJob<MyJob>(ops => ops.WithIdentity(jobKey));
    q.AddTrigger(ops => ops
        .ForJob(jobKey)
        .WithIdentity("Trigger")
        .WithSimpleSchedule(x => x
            .WithIntervalInHours(720)
            .RepeatForever()
        )
    );
});

// Quartz的Host配置(与ASP.NET Core项目同生命周期)
builder.Services.AddQuartzHostedService(options =>
{
    options.WaitForJobsToComplete = true;
});

关于Host的补充说明

如此也可创建Host,但在ASP.NET中无需如此(存在 var app = builder.Build() 与 app.Run())

var host = CreateHostBuilder(args).Build();
host.Run();

static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((context, services) =>
            {
                // 从 appsettings.json 中加载 Quartz 配置
                services.Configure<QuartzOptions>(context.Configuration.GetSection("Quartz"));

                // 添加 Quartz 调度器服务
                services.AddQuartz(q =>
                {
                    q.UseMicrosoftDependencyInjectionJobFactory();

                    //从配置文件加载 Quartz 配置
                    q.UsePersistentStore(options =>
                    {
                        context.Configuration.GetSection("Quartz").Bind(options);
                    });

                    var jobKey = new JobKey("Job");
                    q.AddJob<MyJob>(ops => ops.WithIdentity(jobKey));
                    q.AddTrigger(ops => ops
                    .ForJob(jobKey)
                    .WithDescription("Trigger")
                    .WithSimpleSchedule(x => x
                            .WithIntervalInHours(720)
                            .RepeatForever()
                            )
                    );
                });

                // 添加 Quartz Hosted Service
                services.AddQuartzHostedService(options =>
                {
                    options.WaitForJobsToComplete = true;
                });
            });

http://www.kler.cn/a/303787.html

相关文章:

  • ssm114基于SSM框架的网上拍卖系统的设计与实现+vue(论文+源码)_kaic
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-集成心知天气(二)
  • Prometheus面试内容整理-Exporters
  • AUTOSAR_EXP_ARAComAPI的7章笔记(3)
  • 手动实现promise的all,race,finally方法
  • 继承和多态(上)
  • LSS如何做深度和语义预测
  • ROS CDK魔法书:建立你的游戏王国(Csharp篇)
  • 几种mfc140u.dll常见错误情况,以及mfc140u.dll文件修复的方法
  • 【kafka】kafka如何保证数据的可靠性,kafka如何保证数据不丢失
  • 红外图像处理算法详解:从基础到应用
  • ‌seq_len 不等于 hidden_size 难道不会报错吗,他们是一会事情吗
  • Rocket: 从零开始构建Rust Web服务
  • 【计算机网络】电路交换、电报交换、分组交换
  • yum下载软件失败:‘Could not resolve host: mirrorlist .centos .org; Unknowm error
  • C++笔记---继承(上)
  • 参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制
  • 门磁模块详解(防盗感应开关 STM32)
  • 2398. 预算内的最多机器人数目(24.9.13)
  • 【论文笔记】AutoLFADS (Nature Methods, 2022)
  • 深度学习的笔记
  • vue的自定义指令
  • 连年(年份)
  • 再次进阶 舞台王者 第八季完美童模全球赛代言人【肖牧辰】赛场+秀场超燃合集!
  • C51单片机-单按键输入识别,键盘消抖
  • 【原创教程】电气电工18:三大品牌的IO_LINK