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

CSDN 2024-08-03 10:03:02 阅读 72

文章目录

前言一、效果图二、具体实现1.NuGet 添加包2.Program.cs 注册(完整代码)3.appsettings.json配置数据库连接(完整代码)4.解决方案新建Utilities文件夹实现一些帮助类1)AppSettingHelper.cs(配置文件帮助类)2)SqlsugarSetup.cs( Sqlsugar启动类)3)新建QuartzDll文件夹,再创建Job文件夹(DLL挂载任务建立)4)用户信息API接口.cs完整代码

三、开发完后前端配置总结


前言

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


一、效果图

在这里插入图片描述

二、具体实现

1.NuGet 添加包

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

<code>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>code>

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。