continue in task

This commit is contained in:
anjoy8 2021-04-01 14:56:26 +08:00
parent 2c012922ad
commit 2225c05488
4 changed files with 41 additions and 86 deletions

View File

@ -1,7 +1,10 @@
using Blog.Core.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using Quartz.Spi;
using System;
using System.Linq;
using System.Reflection;
namespace Blog.Core.Extensions
{
@ -18,9 +21,22 @@ namespace Blog.Core.Extensions
//services.AddHostedService<Job2TimedService>();
services.AddSingleton<IJobFactory, JobFactory>();
services.AddTransient<Job_Blogs_Quartz>();//Job使用瞬时依赖注入
services.AddTransient<Job_OperateLog_Quartz>();//Job使用瞬时依赖注入
//services.AddTransient<Job_Blogs_Quartz>();//Job使用瞬时依赖注入
//services.AddTransient<Job_OperateLog_Quartz>();//Job使用瞬时依赖注入
services.AddSingleton<ISchedulerCenter, SchedulerCenterServer>();
//任务注入
var baseType = typeof(IJob);
var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
var referencedAssemblies = System.IO.Directory.GetFiles(path, "Blog.Core.Tasks.dll").Select(Assembly.LoadFrom).ToArray();
var types = referencedAssemblies
.SelectMany(a => a.DefinedTypes)
.Select(type => type.AsType())
.Where(x => x != baseType && baseType.IsAssignableFrom(x)).ToArray();
var implementTypes = types.Where(x => x.IsClass).ToArray();
foreach (var implementType in implementTypes)
{
services.AddTransient(implementType);
}
}
}
}

View File

@ -9,11 +9,7 @@ namespace Blog.Core.Tasks
{
public class JobBase
{
public readonly ITasksQzServices _tasksQzServices;
public JobBase(ITasksQzServices tasksQzServices)
{
_tasksQzServices = tasksQzServices;
}
public ITasksQzServices _tasksQzServices;
/// <summary>
/// 执行指定任务
/// </summary>
@ -43,14 +39,14 @@ namespace Blog.Core.Tasks
JobExecutionException e2 = new JobExecutionException(ex);
//true 是立即重新执行任务
e2.RefireImmediately = true;
//SerilogServer.WriteErrorLog(context.Trigger.Key.Name.Replace("-", ""), $"{context.Trigger.Key.Name}任务运行异常", ex);
jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行失败:{ex.Message}】";
}
finally
{
taskSeconds = Math.Round(stopwatch.Elapsed.TotalSeconds, 3);
jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行结束】(耗时:{taskSeconds}秒)";
if(_tasksQzServices!=null)
{
var model = await _tasksQzServices.QueryById(jobid);
if (model != null)
{
@ -61,6 +57,7 @@ namespace Blog.Core.Tasks
await _tasksQzServices.Update(model);
}
}
}
Console.Out.WriteLine(jobHistory);
return jobHistory;

View File

@ -1,7 +1,5 @@
using Blog.Core.Common.Helper;
using Blog.Core.IServices;
using Blog.Core.IServices;
using Quartz;
using System;
using System.Threading.Tasks;
/// <summary>
@ -13,32 +11,14 @@ namespace Blog.Core.Tasks
{
private readonly IBlogArticleServices _blogArticleServices;
public Job_Blogs_Quartz(IBlogArticleServices blogArticleServices, ITasksQzServices tasksQzServices) : base(tasksQzServices)
public Job_Blogs_Quartz(IBlogArticleServices blogArticleServices, ITasksQzServices tasksQzServices)
{
_blogArticleServices = blogArticleServices;
_tasksQzServices = tasksQzServices;
}
public async Task Execute(IJobExecutionContext context)
{
//var param = context.MergedJobDataMap;
// 可以直接获取 JobDetail 的值
var jobKey = context.JobDetail.Key;
var jobId = jobKey.Name;
var executeLog = await ExecuteJob(context, async () => await Run(context));
// 也可以通过数据库配置,获取传递过来的参数
JobDataMap data = context.JobDetail.JobDataMap;
//int jobId = data.GetInt("JobParam");
//var model = await _tasksQzServices.QueryById(jobId);
//if (model != null)
//{
// model.RunTimes += 1;
// model.Remark += $"{executeLog}<br />";
// await _tasksQzServices.Update(model);
//}
}
public async Task Run(IJobExecutionContext context)
{
@ -47,27 +27,5 @@ namespace Blog.Core.Tasks
JobDataMap data = context.JobDetail.JobDataMap;
//int jobId = data.GetInt("JobParam");
}
public async Task Run(IJobExecutionContext context, int jobid)
{
var list = await _blogArticleServices.Query();
if (jobid > 0)
{
var model = await _tasksQzServices.QueryById(jobid);
if (model != null)
{
model.RunTimes += 1;
var separator = "<br>";
model.Remark =
$"【{DateTime.Now}】执行任务【Id{context.JobDetail.Key.Name},组别:{context.JobDetail.Key.Group}】【执行成功】:博客数{list.Count}{separator}"
+ string.Join(separator, StringHelper.GetTopDataBySeparator(model.Remark, separator, 9));
await _tasksQzServices.Update(model);
}
}
await Console.Out.WriteLineAsync("博客总数量" + list.Count.ToString());
}
}
}

View File

@ -1,5 +1,4 @@
using Blog.Core.Common.Helper;
using Blog.Core.Common.LogHelper;
using Blog.Core.Common.LogHelper;
using Blog.Core.IServices;
using Blog.Core.Model.Models;
using Microsoft.AspNetCore.Hosting;
@ -21,24 +20,25 @@ namespace Blog.Core.Tasks
private readonly IOperateLogServices _operateLogServices;
private readonly IWebHostEnvironment _environment;
public Job_OperateLog_Quartz(IOperateLogServices operateLogServices, ITasksQzServices tasksQzServices, IWebHostEnvironment environment) : base(tasksQzServices)
public Job_OperateLog_Quartz(IOperateLogServices operateLogServices, ITasksQzServices tasksQzServices, IWebHostEnvironment environment)
{
_operateLogServices = operateLogServices;
_environment = environment;
_tasksQzServices = tasksQzServices;
}
public async Task Execute(IJobExecutionContext context)
{
var executeLog = await ExecuteJob(context, async () => await Run(context));
}
public async Task Run(IJobExecutionContext context)
{
// 可以直接获取 JobDetail 的值
var jobKey = context.JobDetail.Key;
var jobId = jobKey.Name;
var executeLog = await ExecuteJob(context, async () => await Run(context, jobId.ObjToInt()));
// 也可以通过数据库配置,获取传递过来的参数
JobDataMap data = context.JobDetail.JobDataMap;
}
public async Task Run(IJobExecutionContext context, int jobid)
{
List<LogInfo> excLogs = new List<LogInfo>();
var exclogContent = LogLock.ReadLog(Path.Combine(_environment.ContentRootPath, "Log"), $"GlobalExceptionLogs_{DateTime.Now.ToString("yyyMMdd")}.log", Encoding.UTF8);
@ -76,22 +76,6 @@ namespace Blog.Core.Tasks
{
var logsIds = await _operateLogServices.Add(operateLogs);
}
if (jobid > 0)
{
var model = await _tasksQzServices.QueryById(jobid);
if (model != null)
{
var list = await _operateLogServices.Query(d => d.IsDeleted == false);
model.RunTimes += 1;
var separator = "<br>";
model.Remark =
$"【{DateTime.Now}】执行任务【Id{context.JobDetail.Key.Name},组别:{context.JobDetail.Key.Group}】【执行成功】:异常数{list.Count}{separator}"
+ string.Join(separator, StringHelper.GetTopDataBySeparator(model.Remark, separator, 9));
await _tasksQzServices.Update(model);
}
}
}
}