Quartz.net官方开发指南 第十课: 配置、资源使用以及SchedulerFactory

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
   Quartz以模块方式构架,因此,要使它运行,几个组件必须很好的咬合在一起。幸运的是,已经有了一些现存的助手可以完成这些工作。
在Quartz进行工作之前需要被配置的组件主要有:
• ThreadPool 线程池
• JobStore
• DataSources (如果需要)
• Scheduler本身
ThreadPool(线程池)为Quartz运行任务时提供了一些线程。池中的线程越多,那么并发运行的任务数就越多。但是,过多的线程会降低系统的运行速度。大多数用户发现5个或者相近的线程就已经足够了,因为任何给定的时间段内都不超过100个任务要运行,而且这些任务不会在同一时刻运行,同时任务活动时间很短(很快就结束了)。其他的用户发现需要10,15,50,甚至100个线程,因为每个schedules都有成千上万的触发器,并且在给定的时刻会有平均10到100个任务在运行。确定schedule的线程池中的线程数量的合理值取决于用scheduler来做什么。除了尽可能少地设置线程数量,使得任务执行时线程够用外(由于计算机资源的有限性),没有其他实用的准则。注意:如果触发器触发的时间到了,却没有可用的线程,那么Quartz将会让这个任务等待,直到有线程可用。这样,任务的执行将比它因该执行的时间晚一些毫秒。如果scheduler的配置的“未触发极限”时限中仍然没有线程可用,这甚至会导致“未触发(misfire)”。
ThreadPool接口定义在org.quartz.spi中,你也可以创建一个自己的ThreadPool(线程池)实现,Quartz打包了一个简单(但非常满意的)的线程池,名为:org.quartz.simpl.SimpleThreadPool,这个线程池只是简单地在它的池中保持固定数量的线程,不增长也不缩小。但是它非常健壮且经过良好的测试,差不多每个Quartz用户都使用这个池。
JobStoresDataSrouces在第九课中已经讨论过,值得注意的一个事实是所有的JobStores都实现了IJobStore接口,如果捆绑的JobStores不能满足你的要求,你可以自己开发一个。
JobStores
最后你需要创建自己的 Scheduler实例。 Scheduler本身需要给定一个名字处理的JobStore和ThreadPool实例。
StdSchedulerFactory
StdSchedulerFactory是对org.quartz.SchedulerFactory接口的一个实现。是使用一套属性(NameValueCollection)来创建和初始化Quartz Scheduler。这些属性通常在文件中存储和加载。也可以通过编写程序来直接操作工厂。简单地调用工厂的getScheduler()就可以产生一个scheduler,初始化(以及它的ThreadPool、JobStore和DataSources),并且返回一个公共的接口。
DirectSchedulerFactory
DirectSchedulerFactory是SchedulerFactory的另一个实现。它对于那些希望用更加程序化的方式创建Scheduler非常有用。不鼓励使用它的原因如下:
(1) 它需要用户非常了解他们想要干什么。
(2) 它不允许声明式的配置。换句话说,它使用硬编码的方式设置scheduler。
Logging 日志
Quartz用 Common.Logging framework架来满足它所有的日志需要。Quartz不会产生太多的日志信息,通常只是一些初始化信息以及只有在任务执行时发生的一些严重问题的信息。要“调整”日志设置(例如输出量以及在哪输出),需要理解 Common.Logging framework框架,这不在本文档的讨论范围内。





本文转自 张善友 51CTO博客,原文链接:http://blog.51cto.com/shanyou/73986,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
开发框架 JSON .NET
ASP.NET Core 自定义配置警告信息
自定义配置警告信息需要在 startup 类中的 ConfigureService 方法中进行配置示例: // 注册 控制器服务 services.AddControllers(configure: setup => { setup.ReturnHttpNotAcceptable = true; ...
80 0
|
30天前
|
数据库连接 开发者
.NET 内存管理两种有效的资源释放方式
【10月更文挑战第15天】在.NET中,有两种有效的资源释放方式:一是使用`using`语句,适用于实现`IDisposable`接口的对象,如文件流、数据库连接等,能确保资源及时释放,避免泄漏;二是手动调用`Dispose`方法并处理异常,提供更灵活的资源管理方式,适用于复杂场景。这两种方式都能有效管理资源,提高应用性能和稳定性。
|
1月前
|
算法 Java 数据库连接
.NET 内存管理两种有效的资源释放方式
【10月更文挑战第14天】在 .NET 中,`IDisposable` 接口提供了一种标准机制来释放非托管资源,如文件句柄、数据库连接等。此类资源需手动释放以避免泄漏。实现 `IDisposable` 的类可通过 `Dispose` 方法释放资源。使用 `using` 语句可确保资源自动释放。此外,.NET 的垃圾回收器会自动回收托管对象所占内存,提高程序效率。示例代码展示了如何使用 `MyFileHandler` 类处理文件操作并释放 `FileStream` 资源。
|
3月前
|
开发框架 前端开发 .NET
究竟是什么让.NET 开发者社区拥有如此强大的力量?资源、分享还是成长的秘密?
【8月更文挑战第28天】.NET开发者社区为成员提供了丰富的资源、积极的分享氛围和广阔的成长空间,是一个充满活力的知识宝库。在这里,从前沿的开源项目到深入的技术解析应有尽有,无论你是新手还是专家,都能找到适合自己的学习与交流机会,共同推动.NET技术的发展。
39 5
|
3月前
|
开发框架 JSON 安全
分享一个 .NET Core 使用选项方式读取配置内容的详细例子
分享一个 .NET Core 使用选项方式读取配置内容的详细例子
|
3月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
3月前
|
开发框架 NoSQL .NET
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
|
3月前
|
开发框架 前端开发 JavaScript
前后端分离,Asp.net core webapi 如何配置跨域
前后端分离,Asp.net core webapi 如何配置跨域
|
3月前
.Net Core NLog 配置
.Net Core NLog 配置
30 0
|
5月前
|
存储 分布式计算 大数据
MaxCompute操作报错合集之自定义udf的函数,引用了import net.sourceforge.pinyin4j.PinyinHelper;但是上传资源后,出现报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
103 0
下一篇
无影云桌面