.NET8 动态添加定时任务(CRON Expression, Whatever)

news/2024/9/18 7:37:58/ 标签: .net, quartz, .netcore

需要使用 Quartz .NET

 <PackageReference Include="Quartz.AspNetCore"/>

建立 Global JobKey

public static class GlobalJobKey
{public static JobKey CustomizedKey => new JobKey("xxx scheduled", "group1");
}

建立 Job

public class CustomizedJob : IJob
{public async Task Execute(IJobExecutionContext context){// pass the parameter if you want,// depends on your business logicvar customizedData =JsonSerializer.Deserialize<YourType>(context.MergedJobDataMap.Get("data").ToString()!);// your logic}
}

在 Program.cs 中配置 Quartz .NET

// construct the Quartz Trigger
builder.Services.AddQuartz(q =>
{q.AddJob<CustomizedJob>(opt => { opt.WithIdentity(GlobalJobKey.CustomizedKey).StoreDurably(); });
});builder.Services.AddQuartzHostedService(options => { options.WaitForJobsToComplete = true; });builder.Services.AddScoped<IJob, CustomizedJob>();

可以在任意地方: Controller, Background Service, Service… 中进行配置

public class CustomizedBackgroundService(ISchedulerFactory factory,IServiceScopeFactory scopeFactory,ILogger<CustomizedBackgroundService> logger) : IHostedService
{private IScheduler? Schedule { get; set; }public async Task StartAsync(CancellationToken cancellationToken){if (Schedule != null){await StopJobs(cancellationToken);}using var scope = scopeFactory.CreateScope();var repo = scope.ServiceProvider.GetRequiredService<CustomizedRepository>();var configurations = (await repo.Query()).ToArray();Schedule = await factory.GetScheduler(cancellationToken);await Schedule.Start(cancellationToken);var jobDetail = JobBuilder.Create<CustomizedJob>().WithIdentity(GlobalJobKey.CustomizedKey).StoreDurably().Build();await Schedule.AddJob(jobDetail, true, cancellationToken);Array.ForEach(configurations, Action);return;async void Action(CustomizedConfiguration configuration){var triggerKey = new TriggerKey($"{configuration.Name}-trigger", "group1");var existingTrigger = await Schedule.GetTrigger(triggerKey, cancellationToken);if (existingTrigger != null)await Schedule.UnscheduleJob(triggerKey, cancellationToken);var trigger = TriggerBuilder.Create().WithIdentity(triggerKey).ForJob(GlobalJobKey.CustomizedKey).WithCronSchedule("0 0 0 ? * 1").UsingJobData("data", JsonSerializer.Serialize(configuration)).StartNow().Build();await Schedule.ScheduleJob(trigger, cancellationToken);logger.LogCritical("add trigger for: {Trigger}", $"{configuration.Name}-trigger");}}public async Task StopAsync(CancellationToken cancellationToken){if (Schedule != null){await StopJobs(cancellationToken);}}private async Task StopJobs(CancellationToken cancellationToken){await Schedule?.Shutdown(cancellationToken)!;Schedule?.Clear(cancellationToken);}
}

http://www.ppmy.cn/news/1462370.html

相关文章

QT使用特点汇总

一.Qt的历史及功能介绍 Qt 最早在1991年由挪威的两位程序员 Eirik Chambe-Eng 和 Haavard Nord 开发&#xff0c;他们在1994年创立 Trolltech 公司&#xff08;奇趣科技&#xff09;正式经营软件业务。 Qt 的第一个公众预览版于1995年面世&#xff0c;之后在2008年被诺基亚收购…

实现自动化巡检多台交换机并将输出信息保存到文本文件中

为了实现自动化巡检多台交换机并将输出信息保存到文本文件中,可以扩展之前的 SSHInspectionTool 类,使其能够处理多台交换机的连接和命令执行。我们可以使用多线程来并行处理多个 SSH 连接,以提高效率。 目录 一、导入依赖包 二、编写Java类 (1)SSH.java (2)SSHIns…

Java enum 枚举类

Java Enum 枚举类 概述 枚举类型本质上也是一种类&#xff0c;只不过是这个类的对象是有限的、固定的几个&#xff0c;不能让用户随意创建。 如果针对于某个类&#xff0c;其实例是确定个数&#xff0c;则推荐将此类声明为枚举类。 如果枚举类的实例只有一个&#xff0c;则可…

yarn.lock只对包管理器Yarn有用?

一、问题描述 有一个旧项目&#xff08;原本可能是用yarn进行管理&#xff09;&#xff0c;而当前使用npm进行构建时虽然构建成功&#xff0c;但实际在客户端访问却报错。为了排查问题&#xff0c;首先进行以下操作&#xff1a; 删除node_modules、dist目录 删除package-lock.…

CCF20220901——如此编码

CCF20220901——如此编码 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,cnt1,a[1000],c[1000]{1};cin>>n>>m;for(int i1;i<n;i){cin>>a[i];cnt*a[i];c[i]cnt;}int b[1000]{0};for(int i1;i<n;i)b[i](…

vLLM部署qwen大模型加速推理实现

目录 step1: 编写 vllm_wrapper.py step2: 应用场景&#xff1a;给体检指标生成健康建议 step1: 编写 vllm_wrapper.py from transformers import PreTrainedTokenizer, GenerationConfig, StoppingCriteriaList from typing import Optional, Callable, List, Tuple, Union…

springboot集成dubbo实现微服务系统

目录 1.说明 2.示例 3.总结 1.说明 dubbo官网&#xff1a;https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;支持多种语言&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实…

在jetson nano中安装jetson.inference模块

jetson.inference 是 NVIDIA Jetson 平台的一部分&#xff0c;用于运行深度学习推理。确保你的开发环境是 NVIDIA Jetson 设备&#xff0c;然后按照官方文档进行安装&#xff1a;https://github.com/dusty-nv/jetson-inference jetson-inference 不是通过 pip 安装的常规 Pyth…

C++笔试强训day29

目录 1.排序子序列 2.消减整数 3.最长上升子序列(二) 1.排序子序列 链接https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471 利用指针模拟即可&#xff0c;注意过渡掉开头的恒定段即可。 #include <iostream> using namespace std; const …

Vue3学习-用 vite@latest 初始化项目后,遇到无法识别 .vue 文件

引入app界面遇到 我的解决方案 1.根目录创建 env.d.ts&#xff0c;添加 declare module "*.vue" {import type { DefineComponent } from "vue"const vueComponent: DefineComponent<{}, {}, any>export default vueComponent }2.在 tsconfig.json…

深度学习之基于Pytorch+Flask Web框架预测手写数字

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着人工智能和深度学习的快速发展&#xff0c;手写数字识别已成为一个重要的应用领域。该项目…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 17 节&#xff09; P17《16.Ark-状态管理Prop Link Provide Consume》 将上一节写出的代码进行功能模块封装&#xff1a;1、任务…

【如何检查 ONNX 模型是否正确?】onnx.checker.check_model 用法详解

以下是对 onnx.checker.check_model 函数文档的翻译&#xff1a; onnx.checker.check_model 检查模型的一致性&#xff0c;即模型在结构、格式和配置方面的正确性和完整性。 如果模型的 ir_version 设置不正确或高于检查器的 ir_version&#xff0c;或者模型在 metadata_pro…

从GPT-4o和Google I/O看AI技术变革与未来趋势

引言 在科技界的激烈竞争中&#xff0c;OpenAI 和 Google 这两大巨头不断推出新技术&#xff0c;引领着人工智能的发展。最近&#xff0c;OpenAI 发布了 GPT-4o&#xff0c;恰逢 Google I/O 大会前一天&#xff0c;这一发布会似乎有意“截胡” Google I/O。今天&#xff0c;我…

【Vue3源码学习】— CH3.6 Patch详解

Patch 1 主要功能概括1.1 比较节点类型1.2 节点更新2. 源码解析3. patch流程图3.1 processElement3.2 processComponentpatch 函数是 Vue 渲染器中的核心函数,它负责对比新旧虚拟节点(VNode),并根据差异对实际 DOM 进行更新。这个过程涵盖了组件、元素、文本等不同类型节点…

kubenetes中K8S的命名空间状态异常强制删除Terminating的ns

查看ns状态为异常&#xff1a; 查看ns为monitoring的状态为Termingating状态 使用方法一&#xff1a; kubectl delete ns monitoring --force --grace-period0 使用方法二&#xff1a; kubectl get ns monitoring -o json > monitoring.json 修改删除文件中的"kubern…

在 2024 年如何启动一个 Node.js 项目

现代 Node.js 的开发体验&#xff0c;已经不输 Golang、Rust 这些新兴编程语言。而且&#xff0c;比起使用它的兄弟语言 Deno、Bun&#xff0c;使用 Node 开发项目&#xff0c;坑更少一些&#xff0c;生态也更好一些。 Node.js 的一个特点就是轻便。这个特点我想主要是相比 Ja…

溪谷联运SDK功能全面解析

近期&#xff0c;备受用户关注的手游联运10.0.0版本上线了&#xff0c;不少用户也选择了版本更新&#xff0c;其中也再次迎来了SDK的更新。溪谷软件和大家一起盘点一下溪谷SDK的功能都有哪些吧。 一、溪谷SDK具有完整的运营功能和高度扩展性 1.登录&#xff1a;登录是SDK最基础…

React hooks - useReducer

useReducer 用法使用使用 Immer 更简单的编写 reducer 注意事项 用法 可同时更新多个状态&#xff0c;且能把对状态的修改从组件中独立出来&#xff0c;状态更新逻辑较复杂时可以考虑使用。代码逻辑更清晰&#xff0c;代码行为易预测&#xff1a;组件负责发出行为&#xff0c;…

JVM(7):虚拟机性能分析和故障解决工具之jstat工具

1 jstat(JVM Statistics Monitoring Tool)作用 监视虚拟机各种运行状态信息&#xff0c;可以显示本地或者是远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据 2 命令格式 jstat [options vmid [interval[count]]] 参数解释 第一个参数&#xff1a;options 代…