IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 4、Hangfire在AspNetCore中的使用(一) -> 正文阅读

[Java知识库]4、Hangfire在AspNetCore中的使用(一)

前言:就是定时去执行某一个功能需求,最常见的就是定时去备份数据库,或者去更新token

网上搜索定时执行会有很多方案,最多的就是通过Timer去实现,然后还有通过兄台那个服务去实现,然后又继续搜了下相关内容,发现个好用的,能完美匹配我的需求的,就是hangfire去实现。

一、Timer实现

        public void s()
        {
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Enabled = true;
            timer.Interval = 60000;//执行间隔时间,单位为毫秒
            timer.Start();
            timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer1_Elapsed);
            timer.AutoReset = true; //一分钟一次,保证每一分钟都执行一次。
        }
        private void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //do your work
            
        }

没什么可说的,需要设置时间间隔,然后每一个时间间隔触发事件去执行业务,代码不简洁,而且如果需求是每月一号去执行的话,这个就完犊子了,不好用,

二、windows服务

c#之添加window服务(定时任务) - 云+社区 - 腾讯云

上面这个是可以的,但是需要应用提供操作接口,去操作比如备份数据库等功能需求。

三、Hangfire

3.1 简介

Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/任务计划程序,可以使用于ASP.NET 应用也可以使用于控制台。Hangfire 只需简单几句代码即可创建新的不同种类的任务。目前 Hangfire 已经支持.NET Core 。

GitHub:https://github.com/HangfireIO/Hangfire

官网:http://hangfire.io/?

相关文档介绍:http://docs.hangfire.io/en/latest/

3.2 创建AspNetCore项目

此处笔者创建一个 Asp.NET Core Web API项目

3.3 安装

引入nuget包 Hangfire.AspNetCore

版本很多,我先安装这个?

3.4 配置

需要修改Startup类中的这两处

如果需要对数据库操作,需要添加对应的版本,笔者这里不需要对数据库操作,因此不用添加数据库版本,但是需要操作内存,因此在添加个Hangfire.MemoryStorage程序包

3.5 写配置

ConfigureServices?配置代码:

public void ConfigureServices(IServiceCollection services)
{
    //使用内存做持久化,有数据库的可以添加数据库程序包,然后修改这里配置就可以了
    services.AddHangfire(x => x.UseStorage(new MemoryStorage()));
}

Configure?添加配置代码:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //2.0版本后不在Configure中实现,需要在ConfigureServices中添加服务
    //这也是为什么这里会报警的原因
    app.UseHangfireServer();

    //启动hangfire面板
    app.UseHangfireDashboard();

    RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"), Cron.Minutely());
}

这是网上的代码,有两点问题

1、方法签名即将过时,后续发布的2.0版本将采用新的函数接口,具体的修改可根据提示来修改,很简单,这里不再赘述。

2、正常情况,使用Cron.Minutely()函数是表示每分钟执行一次,但是这里没有执行,需要再添加一个参数,TimeZoneInfo.Local

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseHangfireServer();
    app.UseHangfireDashboard();

    var strDate=DateTime.Now.ToString();

    RecurringJob.AddOrUpdate(() => Recurring(), Cron.Minutely(), TimeZoneInfo.Local);
}
        //说明,此处必须得是public的,不然,RecurringJob.AddOrUpdate不能调用这个函数,会报错
        public void Recurring()
        {
            var strDate=DateTime.Now.ToString();
            Console.WriteLine("{0},{1}","每分钟调一次",strDate);
        }

可以看到是定时执行的。

3.6?Cron

很灵活,想实现什么定时需求调用那个函数签名就可以,包括2.0版本后需要自己写表达式,具体的可以参考这篇文章【转】cron表达式详解 - 我只吃大碗 - 博客园

3.7 面板

地址:https://localhost:5001/hangfire

这里要根据自己的地址来,默认是hangfire,访问Hangfire的dashboard页面,看一下任务的执行情况。

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:09:58  更:2022-03-30 18:12:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:17:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码