前言:
眼前我们对“firedacmysql”都比较着重,朋友们都想要学习一些“firedacmysql”的相关文章。那么小编同时在网摘上搜集了一些对于“firedacmysql””的相关知识,希望同学们能喜欢,你们快快来了解一下吧!Hangfire是一款定时调度服务框架,目前已支持Net6,最大的特点是内置控制台,直观监控服务运行性能。
Hangfire包含三大核心组件:客户端、持久化存储、服务端。
理论知识就不阐述了,直接上代码:
首先要用到2个包:
注册服务:
//注入Hangfire服务 services.AddHangfire(config => config.UseSqlServerStorage("数据库连接字符串"));
配置服务:
//强制显示中文System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");//配置hangfire服务app.UseHangfireServer(new BackgroundJobServerOptions{ WorkerCount = Environment.ProcessorCount * 5, //并发任务数 ServerName = "xx系统定时调度"}); //hangfire权限app.UseHangfireDashboard($"/service/hangfire", new DashboardOptions(){ Authorization = new BasicAuthAuthorizationFilter[] { new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions(){ SslRedirect=false, RequireSsl=false, Users=new BasicAuthAuthorizationUser[]{ new BasicAuthAuthorizationUser(){ Login="用户", //也可以将这个写入数据库 PasswordClear="密码" } } }) }});//初始化IntervalIntervalService.Create(app.ApplicationServices);
上述就是简单实现了调度任务,接下来实现初始化任务以及任务创建方法,上面使用到:IntervalService 这个类,接下来实现这个类的方法
public class IntervalService{ /// <summary> /// 初始化任务创建 /// </summary> /// <param name="provider"></param> public static void Create(IServiceProvider provider) { IntervalService test = (IntervalService)FormatterServices.GetUninitializedObject(typeof(IntervalService)); test.Start(); } /// <summary> /// 主线程开始 /// </summary> public void Start() { //每天早上5点运行一次 RecurringJob.AddOrUpdate("任务名称", () => 具体实现方法, "0 0 5 * * ?", TimeZoneInfo.Local); }}
这里的执行时间是:Cron表达式 ,目前有很多在线生成Cron表达式的网站,这里介绍几个常用的表达式:
/// Cron表达式示例:/// 0 0 12 * * ? 每天12点运行/// 0 15 10 ? * * 每天10 : 15运行/// 0 15 10 * * ? 每天10 : 15运行/// 0 15 10 * * ? * 每天10 : 15运行/// 0 0/5 * * * ? 每分钟运行一次/// 0 15 10 * * ? 2008 在2008年的每天10:15运行/// 0 * 14 * * ? 每天14点到15点之间每分钟运行一次,开始于14: 00,结束于14: 59。/// 0 0 / 5 14 * * ? 每天14点到15点每5分钟运行一次,开始于14: 00,结束于14: 55。/// 0 0 / 5 14,18 * * ? 每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。/// 0 0 - 5 14 * * ? 每天14 : 00点到14: 05,每分钟运行一次。/// 0 10,44 14 ? 3 WED 3月每周三的14: 10分到14: 44,每分钟运行一次。/// 0 15 10 ? * MON - FRI 每周一,二,三,四,五的10: 15分运行。/// 0 15 10 15 * ? 每月15日10 : 15分运行。/// 0 15 10 L * ? 每月最后一天10 : 15分运行。/// 0 15 10 ? * 6L 每月最后一个星期五10:15分运行。/// 0 15 10 ? * 6L 2007 - 2009 在2007,2008,2009年每个月的最后一个星期五的10: 15分运行。/// 0 15 10 ? * 6#3 每月第三个星期五的10:15分运行。
避坑指南:
如操作系统是linux,则可能会出现时差问题(晚上变白天执行),有些说需要在代码中TimeZoneConverter依赖,亲身经历无效果,最后在服务器上执行:
设置:\cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime查看:date
如果是docker部署,则需要dockerfile文件里设置:
#设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
运行程序后,在路径中输入: /service/hangfire,即可看到运行界面,程序初次运行时有点慢,会自动创建表,如果是需要使用新库则先创建库。
至此定时服务已经完成,看下运行效果如下:
下一篇介绍:Hangfire之Mysql 版本
标签: #firedacmysql