C# quartz.net 定时任务(三)

4 篇文章 1 订阅

Scheduler

quartz想要运行,需要先配置好TreadPool,JobStore,DataSource,Scheduler

  • TreadPool的默认实现DefaultThreadPool可以配置最大并发数等属性,也说明quartz的定时任务都是在后台执行的。
  • JobStore和DataSource上一节说过了,一般使用默认值不用配置。
  • Scheduler需要最后配置,生成实例并关联JobStore和ThreadPool。

StdSchedulerFactory
绝大多数情况下使用的Scheduler工厂。
ISchedulerFactory的一个实现类,调用GetScheduler方法就可以初始化一个Scheduler(包括关联的ThreadPool、JobStore和DataSources)。


DirectSchedulerFactory
除非特别了解Scheduler工厂,否则一般不使用这个类。
使用这个工厂需要手动配置工厂的所有属性。


Logging
quartz默认使用LibLog来做日志记录,LibLog只会记录初始化信息和job在excute时候报错的信息,也可以自行选择使用Log4Net来代替默认的日志


集群Cluster
集群配置只能在JobStore使用JobStoreTx的情况下使用。
进行如下配置:
quartz.jobStore.clustered=true
集群里面的实例都需要使用相同的quartz配置,除了以下两个属性:

  • ThreadPool的pool size
  • quartz.scheduler.instanceId(设置成Auto之后会自动区别)一定要唯一

注意1:如果定时任务集群要使用多台服务器,那么这些服务器上的时间要是一致的!
注意2:非集群的两个定时任务,不要用JobStoreTx关联同一个数据库!
注意3:如果cpu性能不够,已经100%使用的CPU无法及时更新数据库里面的jobStore数据,会引发job多次execute

其他

Quartz.Jobs命名空间提供了一些特殊的Job,实现发送邮件等功能。
但是这是一个单独的NuGet包,如果需要请安装Quartz.Jobs
Install-Package Quartz.Jobs -Version 3.2.3

JobFactory
默认的JobFactory,在trigger触发的时候,会创建Job的实例。
实现IJobFactory接口,可以自定义JobFactory,来实现自己需要的功能,例如:由应用中的IoC或者DI容器来创建Job实例的功能。

quartz主要配置信息可以查看:https://www.quartz-scheduler.net/documentation/quartz-3.x/configuration/reference.html

quartz和timer的区别

framework自带的system.timers.timer类也可以用来做任务,但是选择quartz的理由如下

  • timer做定时任务无法设置复杂的时间机制,而quartz可以使用cron表达式
  • timer没有利用ThreadPool(只是开启了thread),而quartz利用了
  • timer没有quartz这样的存储机制(RAM or ADO)
  • 特别简单的定时任务用timer当然也没问题!~

web环境下IIS搞事情

IIS的回收机制会导致quartz经常不触发,IIS8可以设置网站Preloaded+kept running
参考:https://docs.microsoft.com/zh-cn/archive/blogs/vijaysk/iis-8-whats-new-website-settings
建议定时任务可以写成service或者winform程序部署在服务器上-,-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值