fluentscheduler用来开发可定时执行重复性的任务

2024-02-12 02:58

本文主要是介绍fluentscheduler用来开发可定时执行重复性的任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近有个需求,需要开发一个程序对一些电脑定时侦测是否在线,如果在线可以连接成功再执行一些其他操作。

对这种定时执行某项任务,一开始想用之前开发过的Windows service。但是这种服务部署麻烦,还容易出错挂掉。最后经过查询决定用比较简单易用的fluentscheduler。

方案是将核心代码封装为DLL,新建一个应用程序部署在IIS上,利用Global.asax执行定时重复作业方法的调用。

特别主要的是该服务会被IIS回收,所以要在Application_End结束程序时,要自己访问自己,保证不会被iis回收掉,这样才能保证24小时不间断服务,才不会中断,切记!

 

IIS预加载

应用程序池回收之后,如果没有人访问网站,w3wp是不会启动的,那也就代表着我们的定时任务就不会启动了,所以我们需要在程序池被回收之后模拟访问一下该网站,我们可以通过写一个定时的程序每隔一秒钟访问一遍该网站来解决这个问题,但是为了解决这个问题多写一个程序并没有必要,因为微软已经提供了一个网站预加载的功能,每当应用程序池被回收,系统就会启动一个进程模拟访问一遍网站

具体设置如下:

global.asax

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;namespace RetrunPassword
{public class Global : System.Web.HttpApplication{protected void Application_Start(object sender, EventArgs e){RepeatbyTimer.StartUp();//启动定时更新归还密码失败的电脑}protected void Session_Start(object sender, EventArgs e){}protected void Application_BeginRequest(object sender, EventArgs e){}protected void Application_AuthenticateRequest(object sender, EventArgs e){}protected void Application_Error(object sender, EventArgs e){}protected void Session_End(object sender, EventArgs e){}protected void Application_End(object sender, EventArgs e){}}
}

定时任务类及方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FluentScheduler;
using System.Configuration;
using System.Diagnostics;namespace RetrunPassword
{public class RepeatbyTimer{    /// <summary>/// 启动定时任务/// </summary>public static void StartUp(){JobManager.Initialize(new ApiJobFactory());}/// <summary>/// 停止定时任务/// </summary>public static void Stop(){JobManager.Stop();}}/// <summary>/// 待处理的作业工厂,在构造函数中设置好各个Job的执行计划。/// 参考【https://github.com/fluentscheduler/FluentScheduler】/// </summary>public class ApiJobFactory : Registry{public ApiJobFactory(){// 立即执行每两秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)Schedule<Demo>().ToRunNow().AndEvery(1).Minutes();延迟一个指定时间间隔执行一次计划任务。(当然,这个间隔依然可以是秒、分、时、天、月、年等。)//Schedule<Demo>().ToRunOnceIn(5).Minutes();在一个指定时间执行计划任务(最常用。这里是在每天的下午 1:10 分执行)//Schedule(() => Trace.WriteLine("It's 1:10 PM now.")).ToRunEvery(1).Days().At(13, 10);立即执行一个在每月的星期一 3:00 的计划任务(可以看出来这个一个比较复杂点的时间,它意思是它也能做到!)//Schedule<Demo>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);在同一个计划中执行两个(多个)任务//Schedule<Demo>().AndThen<Demo>().ToRunNow().AndEvery(5).Minutes();}}public class Demo : IJob{public static string connectionString = ConfigurationManager.ConnectionStrings["BPMCEDATAConnectionString"].ConnectionString;void IJob.Execute(){Trace.WriteLine("开始定时任务了,现在时间是:" + DateTime.Now);DataClasses1DataContext dc = new DataClasses1DataContext();var rcd = from ITAccountLists_M in dc.ITAccountLists_M where ITAccountLists_M.Flag == 1 select ITAccountLists_M.CompuAddress;foreach (var r in rcd){RemotePasswordMangement.ChangePassword.ReturnPass(r.ToString(), connectionString);// ReturnPass(r.ToString());}}}
}

 

这篇关于fluentscheduler用来开发可定时执行重复性的任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701506

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.