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自带日志系统,点击执行记录就可以查看执行过程,并且你代码自定义抛出的异常都可以在上面显示,这种方式还是很方便的,应用场景也很多,觉得日志系统简单也可自行增加物理表,自己进行记录。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。