dotnet core 简易定时任务框架TimeJob
很多时候我们可能需要周期重复做一些事情, 定时任务框架应运而生.
在Linux下面crontab集合shell脚本做一些定时重复操作是常见通用的.
但是有时候我们可能需要在程序中做类似的事情,如:
- 定时邮件推送
- 定时监控日报生成
- XXX…
Java这边,一般都使用Quartz框架简单实现定时任务.
.NET这边,也有Quartz.net,不过ASP.NET时代受制于IIS,经常会有同行小伙伴说抱怨定时任务偶尔突然就不跑.
参考文章:
- 网站发布后在IIS上定时执行任务
- Quartz定时任务和IIS程序池闲置超时时间冲突解决方案
到了dotnet core时代,自宿主不依赖IIS了,也有自己独立的主线程之后,我们做定时任务就很方便了.
开源dalaoAmamiya Yuuko 就自己撸了一个简易定时任务框架出来啦.
GitHub开源地址:https://github.com/PomeloFoundation/dotNETCore-Extensions
Nuget地址:Pomelo.AspNetCore.TimedJob
TimeJob 使用教程
Start.cs的ConfigureServices注入AddTimedJob服务
代码如下:
代码语言:javascript复制public void ConfigureServices(IServiceCollection services)
{
services.AddTimedJob();
}
Start.cs的Configure引入UseTimedJob中间件
代码语言:javascript复制 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseTimedJob();
}
新建一个XXXJob.cs类,继承于Job
代码语言:javascript复制
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using Pomelo.AspNetCore.TimedJob;
namespace Sample.Jobs
{
public class TestJob : Job
{
public TestJob()
{
}
[Invoke(Begin = "2018-07-27 00:00", Interval = 1000 * 600, SkipWhileExecuting = true)]
public void Run()
{
Console.WriteLine(DateTime.Now.ToString() ",TestJob run...");
}
}
}
大功告成!
如果需要把定时任务相关的内容固化到数据库,可以参考:Timed Job - Pomelo扩展包系列
嗯?完了?…
对啊,结束了.
真结束了….