net6 hangfire 定时作业+aop+登录验证 vs2022
直接拿去用
Program 中先注册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 使用HttpJon Nuget引入 //Hangfire //Hangfire.AspNetCore //Hangfire.Console //Hangfire.Dashboard.BasicAuthorization --可视化+权限控制 //Hangfire.HttpJob --httpJonb //Hangfire.SqlServer --数据库 //Hangfire.Tags.SqlServer var builder = WebApplication.CreateBuilder(args); { builder.Services.AddHangfire(configura => { //指定存储介质 configura.UseSqlServerStorage(builder.Configuration[ "ConnectionStrings:HangfireConnectionString" ], new SqlServerStorageOptions() //Nuget引入: 数据库连接字符串 先创建好数据库 { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), //滑动超时 SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, //队列轮训间隔 UseRecommendedIsolationLevel = true , UsePageLocksOnDequeue = true , //出列时是需要页锁 DisableGlobalLocks = true // 是否禁用全局锁 }).UseTagsWithSql() //nuget引入Hangfire.Tags.SqlServer .UseConsole( new ConsoleOptions() { BackgroundColor = "#000079" }).UseHangfireHttpJob(); }); } ////后台作业--会保存到数据库中去: 只执行一次 //BackgroundJob.Enqueue(() => Console.WriteLine($"欢迎大家来到,现在时间:{DateTime.Now.ToString()}")); ////间隔一段时间去执行; 间隔一分钟,就去执行一次 //RecurringJob.AddOrUpdate(() => Console.WriteLine($"欢迎大家来到,现在时间:{ DateTime.Now.ToString()}"), Cron.Minutely()); //过了多长时间以后,去执行 //var jobId1 = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"), TimeSpan.FromMinutes(1)); //如果要执行的任务--代码量很多;--怎么办? RecurringJob.AddOrUpdate<SynchronousDataService>(c => c.RefreshSysUserOnCompanyName(), Cron.Minutely); //自定义的任务处理 var app = builder.Build(); { app.UseHangfireServer(); //启动HangfireServer app.UseHangfireDashboard( "/hangfire" , new DashboardOptions() { //这里是默认实现,如果使用这个,小心坑:nuget引入:Hangfire.Dashboard.BasicAuthorization //Authorization = new BasicAuthAuthorizationFilter[] { // new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions(){ // SslRedirect=false, // RequireSsl=false, // Users=new BasicAuthAuthorizationUser[]{ // new BasicAuthAuthorizationUser(){ // Login="admin", // PasswordClear="test", // } // } // }) //} Authorization = new CustomDashboardAuthorizationFilter[] { new CustomDashboardAuthorizationFilter() //自定义的filter } }); ; } |
1 2 3 4 5 6 7 | public class SynchronousDataService: ISynchronousDataService { public void RefreshSysUserOnCompanyName() { Console.WriteLine($ "刷新数据库的---SysUser-CompanyName--{DateTime.Now.ToString()}" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class CustomDashboardAuthorizationFilter : IDashboardAuthorizationFilter { /// <summary> /// 在这里可以调用到HttpContext,就可以根据上下文中的用户信息来判断当前用户是否可以访问这个控制版面 可以JWT /// </summary> /// <param name="context"></param> /// <returns></returns> public bool Authorize([NotNull] DashboardContext context) { Console.WriteLine( "111111111111111" ); return true ; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现