C# .NET6+SqlSugar WebApi实现定时任务Job


前言

想想距离上次更新博客已有几个月之久,不是我赖,是真的没时间,因为这个世界,这个行业已经开始卷的厉害了,今天腾出点时间准备写两篇文章,上一篇文章sqlsugar批量操作数据库只是个开胃菜,今天重点是这篇文章,基于.Net6.0 WebApi的具有跨平台能力的Api 定时Job,今天主要是以dll(不是你理解的dll动态库)挂载方式实现任务,还有基于Controller API模式,这篇就不讲了。基于现在国产化速度加快,跨平台应用及服务已经是大势所趋了。


一、效果图

在这里插入图片描述

二、具体实现

1.NuGet 添加包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Program.cs 注册(完整代码)

using GZY.Quartz.MUI.Extensions;
using QuartzInventory.Utilities;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddControllers();
//1. 添加QuartzUI服务
builder.Services.AddQuartzUI();
//2. 添加基于DLL模式的Quartz任务支持
builder.Services.AddQuartzClassJobs();
//支持sqlsugar
builder.Services.AddSqlsugarSetup(builder.Configuration);
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
//3.使用Quartz组件
app.UseQuartz();
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
//在Use中注册单例实例
app.Use(async (context, next) =>
{
    if (next != null)
    {
        await next.Invoke();
    }
});
app.Run();

3.appsettings.json配置数据库连接(完整代码)

"ConnectString": "Server=STRING\\MSSQLSERVERR2;Database=HISDB;User=sa;Password=123456;"

4.解决方案新建Utilities文件夹实现一些帮助类

1)AppSettingHelper.cs(配置文件帮助类)

namespace QuartzInventory.Utilities
{
    public class AppSettingHelper
    {
        /// <summary>
        /// 系统配置
        /// </summary>
        public static IConfiguration Configuration { get; set; }

        static AppSettingHelper()
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            Configuration = builder.Build();
        }
    }
}

2)SqlsugarSetup.cs( Sqlsugar启动类)

using SqlSugar;

namespace QuartzInventory.Utilities
{
    public static class SqlsugarSetup
    {
        public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration,
         string dbName = "ConnectString")
        {
            SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()
            {
                DbType = SqlSugar.DbType.SqlServer,
                ConnectionString = configuration[dbName],
                IsAutoCloseConnection = true,
            },
                db =>
                {      
                    db.Aop.OnLogExecuting = (sql, pars) =>
                    {
                        Console.WriteLine(sql);//打印sql
                    };
                });
            services.AddSingleton<ISqlSugarClient>(sqlSugar);
        }
    }
}

3)新建QuartzDll文件夹,再创建Job文件夹(DLL挂载任务建立)

在Job文件夹中建立用户信息API接口.cs(为了阅读我以中文命名),这里面实现了你的定时任务。需要继承IJobService接口并实现。

public class 用户信息API接口 : IJobService
 public string ExecuteService(string parameter)
 {
 	//TODO:你的任务调度的业务逻辑
 	return "返回任务执行后的结果或业务逻辑(任意)";
 }

SqlSugar.Core依赖注入

private readonly ISqlSugarClient _SqlSugarDB;
/// <summary>
/// 依赖注入
/// </summary>
public 用户信息API接口(ISqlSugarClient SqlSugarDB)
{
    _SqlSugarDB = SqlSugarDB;
}

_SqlSugarDB 即是你的DB,例如我要查询所有用户:

var userList = _SqlSugarDB.Queryable<base_user>().ToList();

4)用户信息API接口.cs完整代码

using GZY.Quartz.MUI.BaseService;
using QuartzInventory.Models;
using SqlSugar;

namespace QuartzInventory.QuartzDll.Job
{
    public class 用户信息API接口 : IJobService
    {
        private readonly ISqlSugarClient _SqlSugarDB;
        /// <summary>
        /// 依赖注入
        /// </summary>
        public 用户信息API接口(ISqlSugarClient SqlSugarDB)
        {
            _SqlSugarDB = SqlSugarDB;
        }
        /// <summary>
        /// 0 0 11 * * ?   每天中午11点触发
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public string ExecuteService(string parameter)
        {
            //这是个操作数据库的例子
            var userlist = _SqlSugarDB.Queryable<base_user>().ToList();
            //TODO:你的任务调度的业务逻辑
            return "返回任务执行后的结果或业务逻辑(任意)";
        }
    }
}

三、开发完后前端配置

例如我服务地址为https://localhost:44353,需要加上后缀**/QuartzUI即可显示UI配置界面。
在这里插入图片描述
按钮所代表的功能含义就不过多赘述了,一眼明了。刚才写完的DLL挂载方式的Job如果进行创建?点击新建按钮,任务类型下拉选择DLL方式。
在这里插入图片描述
DLL类型名就是刚才你写代码的类名,还记得
用户信息API接口.cs**,没错,下拉会自动找到你对应的类名,选择用户信息API接口
在这里插入图片描述
剩下的按自己实际情况配置就行了,间隔时间是Cron表达式,自己网上搜索,或点击在线生成,任务名称、分组、描述等自定义。
在这里插入图片描述

总结

此Job自带日志系统,点击执行记录就可以查看执行过程,并且你代码自定义抛出的异常都可以在上面显示,这种方式还是很方便的,应用场景也很多,觉得日志系统简单也可自行增加物理表,自己进行记录。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不自由的小码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值