• 手动造工具TaskJobManage


    前言

    在日常开发中,使用Quartz来做定时任务非常常见,每天凌晨自动拉去数据做报表等功能,大家呢也都是习惯了硬编码,使用的都是cron表达式,但是在新写一个功能的时候,需要手动写一个接口去触发这个任务,因为定时的时间没有到点,然后手动触发的参数可能还有 自动定时任务条件不同,于是基于quartz封装了个组件用来管理和支持手动触发提供UI界面管理。

    <PackageReference Include="Qin.TaskJobManage" Version="1.0.6" />
    

    配置

     public void ConfigureServices(IServiceCollection services)
     {
        services.AddTaskJobMiddleware(a=> 
        {
            // Route //主页地址,默认是 /TaskJobUI
            // LoadAssemblyName //job和 IJobExecutionLogs 所在的程序集名称,默认在当前web启动程序集
            // SelfTurnOn //程序启动运行任务
            // options.AddJobExecutionLog<AppService.JobExecutionLog>(); // 作业运行日志
       });
     }
    
    public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime)
    {
          lifetime.ApplicationStarted.Register(() => app.StartTaskJob());// 定时任务在程序启动后自动运行
          app.UseTaskJobMiddleware(); // 要在 app.UseRouting(); 之前
    }
    

    新建作业1

    public class Job1 : TaskModel, IJob 
    {
        public override void Config()
        {
            status = 0;
            taskName = "测试任务a";
            groupName = "分组a";
            describe = "每10秒执行一次";
            cron = "0/10 * * * * ? ";
            Job = typeof(Job1);
        }
    
        public override TriggerBuilder ConfigTrigger(TriggerBuilder triggerbuilder)
        {
            return triggerbuilder;
        }
    
        public Task Execute(IJobExecutionContext context)
        {
            JobDataMap dataMap = context.JobDetail.JobDataMap;
            Console.WriteLine(dataMap.GetString("parms") ?? "");
            string json = context.Trigger.JobDataMap.GetString("parms") ?? "";
            Console.WriteLine("动态传参数是:" + json);
    
            return Task.Run(() =>
            {
                //int p = 0;
                //var a = 12 / p;
                ConsoleExcept.WriteLine("Hello-" + DateTime.Now.ToString("HH:mm:ss"), ConsoleColor.Red);
            });
            //return Task.CompletedTask;
        }
    }
    

    进入管理页面

    http://localhost:xxx/TaskJobUI/
    image

    作业执行日志分页列表

    实现 IJobExecutionLogs

        public class JobExecutionLog : IJobExecutionLogs
        {
            public Task<ResultMsg> GetJobExecutionLog(TaskModel parms, int pageIndex, int pageSize)
            {
                List<TaskModel> list = new List<TaskModel>();
                list.Add(new TaskModel() 
                {
                    status = 0,
                    taskName = "测试任务a",
                    groupName = "分组a",
                    describe = "每10秒执行一次",
                    cron = "0/10 * * * * ? "
                });
                if (!string.IsNullOrWhiteSpace(parms.taskName))
                {
                    list = list.Where(a=>a.taskName == parms.taskName).ToList();
                }
                if (!string.IsNullOrWhiteSpace(parms.groupName))
                {
                    list = list.Where(a => a.groupName == parms.groupName).ToList();
                }
    
                return Task.FromResult(new ResultMsg
                {
                    msg = $"pageIndex={pageIndex},pageSize={pageSize},taskName={parms.taskName},groupName={parms.groupName}",
                    status = true,
                    data = new TableList<TaskModel>()
                    {
                        Count = list.Count(),
                        TableData = list.Skip(pageIndex == 1 ? 0 : 1).Take(pageSize)
                    }
                });
            }
        }
    

    使用Demo下载

    说明

    • 有运行任务日志采集,需要自己实现 WorkingLogProvider ,重写 GetLogger()
    • 其他功能,还在继续优化中,暂不支持数据持久化到 DB,但是支持实现灵活接口,复用
      https://gitee.com/qintaie/TaskJobManage
  • 相关阅读:
    求助
    第五次作业
    第四次作业
    第三次作业
    第二次作业(四则运算)
    关于软件工程相关疑问
    小组成员名单()
    第四次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/Qintai/p/15738336.html
Copyright © 2020-2023  润新知