手机版

详解 NET Core使用Quartz来执行调度任务高级

时间:2021-08-25 来源:互联网 编辑:宝哥软件园 浏览:

一、前言应用场景

石英。Net是一个强大的、开源的、轻量级的作业调度框架。在正常的项目开发中,会不时应用定时调度功能。例如,前一天的数据需要在凌晨统计,或者前一个月的数据需要在每月初统计。当然,还需要进行其他操作来计算每日和每月。我们怎么能写这样的调度任务呢?

二、实际应用(。核心网2.2)

在解决方案中创建. Net控制台应用程序和类库。控制台应用程序被用作程序的起点。类库被用作调度任务的执行器。

然后我们需要改进项目的结构。首先,我们需要在控制台应用程序中创建一个Startup类,这也是任务启动的一个重要条件。

公共类Startup { public Startup(icon Configuration)配置){ Configuration=configuration}公共图标配置{ get} //此方法由运行时调用。使用此方法向容器添加服务。public void ConfigureServices(IServiceCollection services){ services。AddMvc()。SetCompatibilityVersion(兼容性版本。version _ 2 _ 2);} //此方法由运行时调用。使用此方法配置HTTP请求管道。public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env) { if (env。IsDevelopment()) { app。usedeveloper exception page();} else { app。UseExceptionHandler('/Error ');} app。UseMvc();}}然后项目会上报一定的错误,并根据错误信息逐步解决。解决方案:添加NuGet包Microsoft.AspNetCore。

解决错误信息后,表示启动程序目前还可以。接下来,我们可以详细谈谈Quartz调度任务的执行。

因为我们绝对不只是执行一个调度任务,我们在实际的项目运作中肯定会一起执行多个调度任务,所以我们可以改变思路。在类库中创建一个公共启动中心,并引用NuGet包:Quartz。然后开始为调度任务创建一个公共核心

私有IScheduler调度程序;///摘要///创建调度任务的入口////summary////returns/returns public async Task Start(){ await StartJob();} ///摘要///创建调度任务的公共调用中心////摘要////返回/返回公共异步任务开始作业(){ //创建一个工厂NameValueCollection param=new NameValueCollection(){ {“TestJob”,“Test”} };标准调度工厂工厂=新的StdSchedulerFactory(参数);//创建一个调度器调度程序=等待工厂GetScheduler();//开始调度器等待调度程序start();//每三秒打印一个信息日志等待CreateJobStartLogInfoJob(' _StartLogInfoJob ',' _ StartLogInfoJob ',' 0/3 * * * *?');//每五秒打印一个调试日志等待CreateJobStartLogDebugJob(' _StartLogDebugJob ',' _ StartLogDebugJob ',' 0/5 * * * *?');//调度器时间生成地址-http://cron.qqe2.com }///摘要///停止调度器////摘要公共void Stop() {调度程序.关机();scheduler=null} ///摘要///创建运行的调度器////summary////type param name=' T '/type param///param name=' name '/param///param name=' group '/param///param name=' cronttime '/param///returns/returns public async Task CreateJobT(字符串名称、字符串组、字符串cron时间),其中T: IJob { //创建一个作业var作业=作业生成器.CreateT().WithIdentity('name' name,' gtoup' group).build();//创建一个触发器var tigger=(micro trigger)TriggerBuilder .创建()。WithIdentity('name' name,' group' group).StartNow().带时间表build();//把作业和触发器放入调度器中等待调度程序ScheduleJob(作业,跳跳虎);}然后再去创建两个执行业务逻辑的类,分别是StartLogInfoJob和StartLogDebugJob

公共类StartLogInfoJob:IJob {公共异步任务执行(ijjobexecutioncontext)上下文} {等待开始();}公共异步任务开始(){日志帮助。调试('调度打印调试');} }公共类StartLogDebugJob : IJob {公共异步任务执行(IJobExecutionContext)上下文} {等待开始();}公共异步任务开始(){日志帮助。信息('调度打印信息');} }到这里就顺利的完成了一个定时调度器来执行任务了,最后我们得把这个程序文件重新写一下,控制台应用程序生成的程序文件不太符合我们需要要求,同时把调度器在这里面启动。

类程序{ static void Main(string[]args){ HandleStart();var webHostArgs=args .其中(arg=arg!=' -控制台')。ToArray();var host=WebHost .createDefaultBuilder(WebHostArgs).UseStartupStartup().usekesstrel(options={ options .限制MinRequestBodyDataRate=null})。build();主持人run();}静态void HandleStart(){ 0尝试{新计划程序().开始()。GetAwaiter().GetResult();} catch (Exception ex) { LogHelp .错误(例如);} } }我们去看文件夹下面原木文件会发现有一个调试和一个信息

到这里我们的调度就完成了,我们需要使用的时候将打印日志更换成我们日常想要处理的业务逻辑就可以了。刚刚提到打印日志就顺便提一下在。净核心中如何打印日志吧。

三、Net Cor打印日志文件

打印日志文件主要是用到了框架包:NLog,然后再加上一个NLog.config,首先在项目中安装股市分析的包,然后创建一个日志助手的公共类。

公共类日志帮助{静态NLog .Logger logger=NLog .日志管理器。GetCurrentClassLogger();公共静态void Debug(字符串信息){记录器。调试(信息);}公共静态无效信息(字符串信息){ logger .信息(信息);}公共静态无效错误(异常例如,字符串信息='') {记录器。错误(例如);}}然后再添加一个NLog.config文件

?可扩展标记语言版本='1.0 '编码='utf-8 '?nlog xmlns=' http://www。nlog-项目。org/schemass/nlog。xsd ' xmlns : xsi=' http://www .w3。org/2001/XMLSchema-实例“自动加载=”true”目标目标名称='默认日志' xsi 3360类型='文件' keepFileOpen=' false '编码=' utf-8 ' FIlename=' $ { basedir }/logs/$ { level }/$ { short date } .log ' layout=' $ { long date } | $ { level :大写=true } | $ { logger } | $ { message } '//目标规则记录器名称=' * '最小级别=' trace '写入='默认日志'/规则/nlog完成这两个就可以实现日志的打印了。

以上所述是小编给大家介绍的。净核心使用石英执行调度任务进阶详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

版权声明:详解 NET Core使用Quartz来执行调度任务高级是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。