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

Quartz.Net_依赖注入

简述

有时会遇到需要在IJob实现类中依赖注入其他类或接口的情况,但Quartz的默认JobFactory并不能识别具有有参构造函数的IJob实现类,也就无法进行依赖注入

需要被依赖注入的类:

public class TestClass
{public TestClass(Type jobType, string cronExpression){JobType = jobType;CronExpression = cronExpression;}public Type JobType { get; }public string CronExpression { get; }
}

解决方式

1.安装依赖:Quartz、Microsoft.Extensions.DependencyInjection

2.实现接口

        实现IJob接口

    public class MyJob : IJob{private readonly TestClass test;public MyJob(TestClass test){this.test = test;}public Task Execute(IJobExecutionContext context){Console.WriteLine("hello");Console.WriteLine(test.ToString());return Task.CompletedTask;}}

        实现IJobFactory接口

public class MyJobFactory : IJobFactory
{private readonly IServiceProvider _serviceProvider;public MyJobFactory(IServiceProvider serviceProvider){_serviceProvider = serviceProvider;}public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler){return _serviceProvider.GetRequiredService(bundle.JobDetail.JobType) as IJob;}public void ReturnJob(IJob job) { }
}

3.将IJob实现类、IJobFactory实现类、需要被依赖注入的类(TestClass)添加进容器

private static ServiceProvider ConfigureServices()
{var services = new ServiceCollection();services.AddSingleton<MyJob>();services.AddSingleton<IJobFactory, MyJobFactory>();services.AddSingleton(new TestClass(jobType: typeof(MyJob),cronExpression: "0/5 * * * * ?"));return services.BuildServiceProvider();
}

4.将scheduler的JobFactory属性替换为IJobFactory实现类的实例

var scheduler = await StdSchedulerFactory.GetDefaultScheduler();// JobFactory替换为IJobFactory实现类的实例
scheduler.JobFactory = serviceProvider.GetService<IJobFactory>();

5.测试

        static async Task Main(string[] args){var serviceProvider = ConfigureServices();var scheduler = await StdSchedulerFactory.GetDefaultScheduler();// JobFactory替换为IJobFactory实现类的实例scheduler.JobFactory = serviceProvider.GetService<IJobFactory>();var jobSchedule = serviceProvider.GetService<TestClass>();var jobDetail = JobBuilder.Create(jobSchedule.JobType).Build();var trigger = TriggerBuilder.Create().WithCronSchedule(jobSchedule.CronExpression).Build();await scheduler.ScheduleJob(jobDetail, trigger);await scheduler.Start();Thread.Sleep(10000);}

 

相关文章:

Quartz.Net_依赖注入

简述 有时会遇到需要在IJob实现类中依赖注入其他类或接口的情况&#xff0c;但Quartz的默认JobFactory并不能识别具有有参构造函数的IJob实现类&#xff0c;也就无法进行依赖注入 需要被依赖注入的类&#xff1a; public class TestClass {public TestClass(Type jobType, s…...

【系统架构设计师-2011年】综合知识-答案及详解

更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2~4题】【第5~7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18~19题】【第20~21题】【第22题】【第23题】【第24题】【第25题】【第2…...

World of Warcraft [CLASSIC][80][Grandel]Sapphire Hive Drone

Sapphire Hive Drone 蓝玉虫巢雄蜂 蓝玉虫巢巨峰 索拉查盆地 实用性不强&#xff0c;好看是好看&#xff0c;模型很大&#xff0c;无奈栏位太少...

Unity 对接 Android 第三方广告,App 切换到后台后,再次打开时,第三方广告被销毁导致无法触发回调逻辑的问题

该问题是由发行进行游戏测试时遇到并反馈的。大致情况如下&#xff1a; 1. 当触发了插屏广告后&#xff0c;在关闭广告前将 App 切换到后台&#xff0c;之后再次打开 App&#xff0c;此时插屏广告消失&#xff0c;并切游戏卡死。 2. 当触发激励视频广告后&#xff0c;在广告展…...

Kafka Broker处于高负载状态(例如消息处理量大或系统资源不足),无法及时响应消费者的请求

Caused by: org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition activity-0 could be determined。 出现这个错误的原因是Kafka消费者在尝试获取分区(activity-0)的位置信息时&#xff0c;超时了。在60秒内无法确…...

相关二叉树进阶面试题的讲解?看这一篇足矣

引子&#xff1a;我们在之前学过c语言的二叉树&#xff0c;但是c来做更好&#xff01;本期要讲的题目如下(其实有点拖欠了&#xff0c;很久之前&#xff0c;就想写这个了&#xff0c;今天终于克服自己的欲望&#xff0c;达成了这个愿望&#xff09; 1&#xff0c; 二叉树创建字…...

Nginx部署前端Vue项目的深度解析

目录 一、准备工作 1.1 开发环境 1.2 服务器环境 1.3 Nginx安装 二、构建Vue项目 三、上传静态文件到服务器 四、配置Nginx 五、测试并重新加载Nginx 六、访问Vue应用 七、高级配置 7.1 启用HTTPS 7.2 启用Gzip压缩 7.3 缓存控制 八、常见问题与解决方案 8.1 40…...

PHP一站式解决方案高级房产系统小程序源码

一站式解决方案&#xff0c;高级房产系统让房产管理更轻松 &#x1f3e0;【开篇&#xff1a;告别繁琐&#xff0c;迎接高效房产管理新时代】&#x1f3e0; 你是否还在为房产管理的繁琐流程而头疼&#xff1f;从房源录入、客户咨询到合同签订、售后服务&#xff0c;每一个环节…...

轻量级模型解读——EfficientNet系列

EfficientNet自2019年谷歌提出以来&#xff0c;经历了三个版本&#xff0c;2019EfficientNet ——> 2020EfficientNet-Lite——> 2021EfficientNetv2 文章目录 1、EfficientNet2、EfficientNetv23、EfficientNet-Lite 对于EfficientNet和EfficientNetv2的解读可见另外两篇…...

深入浅出SRS—RTMP实现

RTMP 直播是 SRS 最典型的使用场景&#xff0c;客户端使用 RTMP 协议向 SRS 推流&#xff0c;使用 RTMP 协议从 SRS 拉流&#xff0c;SRS 作为一个 RTMP 直播服务器实现媒体的转发。同时&#xff0c;RTMP 是 SRS 的中转协议&#xff0c;其他协议之间的互通需要先转为 RTMP&…...

睿赛德科技携手先楫共创RISC-V生态|RT-Thread EtherCAT主从站方案大放异彩

日前&#xff0c;在先楫HPM6E00技术日上&#xff0c;睿赛德科技&#xff08;RT-Thread&#xff09;向广大工业用户展示了多年来双方在RISC-V生态领域的合作历程和成果&#xff0c;同时睿赛德科技携手先楫半导体首次推出了基于HPM6800处理器的EtherCAT主站解决方案&#xff0c;吸…...

【Cesium实体创建】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Cesium目录 前言一、Cesium二、点 线 实体1.点实体2.线实体 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不…...

为何一些包的Priority在apt-cache和deb文件当中的不一样

最近遇到一些问题&#xff0c;调查的时候发现是一些包的Priority在apt-cache和deb文件当中的不一样导致的&#xff0c;复现步骤如下&#xff1a; $ apt update $ apt download whiptail $ dpkg-deb -e whiptail_0.52.23-1b1_amd64.deb $ cat control | grep Prio Priority: op…...

CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)

关说不练假把式&#xff0c;在上一&#xff0c;二篇中介绍了我心目中的CRUD的样子 基于之前的理念&#xff0c;我开发了一个命名为PasteTemplate的项目&#xff0c;这个项目呢后续会转化成项目模板&#xff0c;转化成项目模板后&#xff0c;后续需要开发新的项目就可以基于这…...

nvidia-cuda-tensorrt-cudnn下载网站

tensorrt:https://developer.nvidia.com/tensorrt/download cudnn:https://developer.nvidia.com/rdp/cudnn-archive cuda:https://developer.nvidia.com/cuda-toolkit-archive...

GitLab 是什么?GitLab使用常见问题解答

GitLab 是什么 GitLab是由GitLab Inc.开发&#xff0c;使用MIT许可证的基于网络的Git仓库管理工具开源项目&#xff0c;且具有wiki和issue跟踪功能&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。 ​GitLab 是由 GitLab Inc.开发&#xff0c…...

数字时代,寻找新的生意增长点之前要做什么准备?

要做好最基础也最繁复的数据管理。 在竞争日益激烈的快消市场中&#xff0c;企业面临前所未有的挑战与压力。在这种高压环境下&#xff0c;数字化转型不再仅仅是选择&#xff0c;而是企业探索新的业务增长点、保持竞争优势的关键战略。然而&#xff0c;随着企业数字化进程的加…...

使用Python本地搭建http.server文件共享服务并实现公网环境远程访问——“cpolar内网穿透”

前言 本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言&#xff0c;在自己的电脑上搭建一个共享文件服务器&#xff0c;并通过cpolar创建的公网地址&#xff0c;打造一个可以随时随地远程访问的私人云盘。 数据共享作为和连接作为互联网的基础应用&#xff…...

STM32——Flash闪存

以上部分&#xff0c;主存储器&#xff1a;程序存储器&#xff1b; 启动程序代码&#xff1a;系统存储器&#xff1b; 用户选择字节&#xff1a;选项字节 以下是闪存的管理员&#xff0c;用于擦除和读写的地址 C8T6一共64K&#xff0c;主存储器为64页 以下是整体框图&#x…...

python科学计算:NumPy 数组的高级操作

1 数组的形状变换 NumPy 提供了多种方法来改变数组的形状。这些方法不会改变数组的内容&#xff0c;而是重新组织数据的排列方式。 1.1 reshape() 函数 reshape() 是最常用的形状变换函数&#xff0c;它可以改变数组的形状&#xff0c;前提是变换后的总元素数量与原数组一致…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...