震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(震惊表情包)

网友投稿 845 2022-09-15

震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(震惊表情包)

震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(震惊表情包)

过场CG:

 

接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为【定时任务】的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案:

  方案一:使用务定时任务框架quartz;

  方案二:使用windows Service服务。

 

最终的作战方案为:两者配套使用。

前言:项目开发完成后,对接的项目有很多个模块,由于其中的一个环节疏忽,现在需要在原有的基础上把缺失的数据自动写入数据库存储起来。

重新修改程序逻辑已然不现实,现在需要一个补丁来进行逻辑更正。

补丁逻辑:两个入口控制,

入口一:点击【更新】按钮同步逻辑后的数据;

入口二:每天晚上18:00进行执行同步逻辑后的数据;

现在我们先使用window服务进行入口二的编写(入口一只需要一个按钮调用入口二的逻辑即可)

windows服务

一、开发环境

操作系统:Windows 7 X64/32

开发环境:VS2017

编程语言:C#

.NET版本:.NET Framework 4.6.1

5、点击MyWindowsService.cs,在左边空白位置右键,“查看代码”,然后编写代码,代码我编写好了,直接拷贝即可使用

6、至此,Windows服务已经创建完毕。

三、创建安装、启动、停止、卸载服务的Windows窗体

1、点击项目,右键,重新生成

在桌面上创建一个文件夹,命名为“我的服务”,将MyWindowsService项目项目生成的bin文件夹Debug文件夹的内容全部复制到新建的文件夹里面;

然后去百度拷贝三个文件到“我的服务”文件里面,分别为Install.bat(安装)、UnInstall.bat(卸载)、InstallUtil.exe(执行),

打开文件,分别打开Install.bat和UnInstall.bat文件,将后面一个xxx.exe修改为你的文件程序,我们的是MyWindowsService.exe。如下图

操作完后双击Install.bat进行安装windows服务,安装成功后点击【计算机】-->右键-->管理-->服务里面找到“我的服务”,启动服务并修改为自动启动;如下图:

这样就实现了windows服务入口二每天晚上18:00进行执行同步逻辑后的数据,只要代码不报错就一直执行;

优点:每天指定时间自动执行指定逻辑

缺点:程序在每次设置的时间内无限执行,消耗资源(CPU等)

quartz定时任务

一、开发环境

操作系统:Windows 7 X64

开发环境:VS2017

编程语言:C#

.NET版本:.NET Framework 4.6.1

二、创建quartz定时任务

1、创建一个控制台任务程序进行演示,命名为MyQuartz,创建如下:

在NuGet管理里面搜索quartz进行安装,注意:Quartz高版本的存在兼容性,建议使用低版本的(2.5.0)

如下图:

3、创建一个执行的类,用于执行后台数据逻辑,命名为TestJob,并且继承Quartz框架的IJob接口,这个累的内容如下,可以直接拷贝

创建一个作业调度池;

创建出来一个具体的作业;

创建并配置一个触发器;

加入作业调度池中;

开始运行。

首先我们看完成代码,然后进行讲解(代码可以直接拷贝):

SimpleTrigger可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次。比如,你有一个trigger,你可以设置它在2015年1月13日的上午11:23:54准时触发,或者在这个时间点触发,并且每隔2秒触发一次,一共重复5次。

根据描述,你可能已经发现了,SimpleTrigger的属性包括:开始时间、结束时间、重复次数以及重复的间隔。这些属性的含义与你所期望的是一致的,只是关于结束时间有一些地方需要注意。

重复次数,可以是0、正整数,以及常量SimpleTrigger.REPEAT_INDEFINITELY。重复的间隔,必须是0,或者long型的正数,表示毫秒。注意,如果重复间隔为0,trigger将会以重复次数并发执行(或者以scheduler可以处理的近似并发数)。

如果你还不熟悉DateBuilder,了解后你会发现使用它可以非常方便地构造基于开始时间(或终止时间)的调度策略。

endTime属性的值会覆盖设置重复次数的属性值;比如,你可以创建一个trigger,在终止时间之前每隔10秒执行一次,你不需要去计算在开始时间和终止时间之间的重复次数,只需要设置终止时间并将重复次数设置为REPEAT_INDEFINITELY(当然,你也可以将重复次数设置为一个很大的值,并保证该值比trigger在终止时间之前实际触发的次数要大即可)。

具体用法我们就不水文了,大家去看Quartz官网文档的用法即可SimpleTrigger触发器使用规则:https://w3cschool-/quartz_doc/quartz_doc-67a52d1f.html,部分截图显示如下:

指定时间开始触发,不重复:

指定时间触发,每隔10秒执行一次,重复10次:

5分钟以后开始触发,仅执行一次:

立即触发,每个5分钟执行一次,直到22:00:

建立一个触发器,将在下一个小时的整点触发,然后每2小时重复一次:

CronTriggerr触发器(基于Cron表达式的触发器CronTriggerr)

CronTrigger通常比Simple Trigger更有用,如果您需要基于日历的概念而不是按照SimpleTrigger的精确指定间隔进行重新启动的作业启动计划。

使用CronTrigger,您可以指定号时间表,例如“每周五中午”或“每个工作日和上午9:30”,甚至“每周一至周五上午9:00至10点之间每5分钟”和1月份的星期五“。

即使如此,和SimpleTrigger一样,CronTrigger有一个startTime,它指定何时生效,以及一个(可选的)endTime,用于指定何时停止计划。

Cron Expressions

出处: https://cnblogs.com/xiongze520/p/13031944.html

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【asp.net core 系列】3 视图以及视图与控制器(aspnet是前端还是后端)
下一篇:Diffie-Hellman密钥协商算法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~