开源框架YiShaAdmin如何使用任务计划
1.在Startup添加 new JobCenter().Start();(红色字体,下同)
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (!string.IsNullOrEmpty(GlobalContext.SystemConfig.VirtualDirectory))
{
app.UsePathBase(new PathString(GlobalContext.SystemConfig.VirtualDirectory)); // 让 Pathbase 中间件成为第一个处理请求的中间件, 才能正确的模拟虚拟路径
}
if (WebHostEnvironment.IsDevelopment())
{
GlobalContext.SystemConfig.Debug = true;
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} string resource = Path.Combine(env.ContentRootPath, "Resource");
FileHelper.CreateDirectory(resource); app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = GlobalContext.SetCacheControl
});
app.UseStaticFiles(new StaticFileOptions
{
RequestPath = "/Resource",
FileProvider = new PhysicalFileProvider(resource),
OnPrepareResponse = GlobalContext.SetCacheControl
});
app.UseSession();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute("areas", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
GlobalContext.ServiceProvider = app.ApplicationServices;
new JobCenter().Start(); }
2.在YiSha.Business.AutoJob的Job文件夹新建TestConsoleJob.cs
using System.Threading.Tasks;
using YiSha.Util.Model; namespace YiSha.Business.AutoJob
{
internal class TestConsoleJob : IJobTask
{
public async Task<TData> Start()
{
TData obj = new TData();
obj.Tag = 1;
obj.Message = "测试调用成功";
return obj;
}
}
}
3.在JobExecute中加入新添加的任务
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl.Triggers;
using YiSha.Entity.SystemManage;
using YiSha.Enum;
using YiSha.Service.SystemManage;
using YiSha.Util;
using YiSha.Util.Extension;
using YiSha.Util.Model; namespace YiSha.Business.AutoJob
{
public class JobExecute : IJob
{
private AutoJobService autoJobService = new AutoJobService();
private AutoJobLogService autoJobLogService = new AutoJobLogService(); public Task Execute(IJobExecutionContext context)
{
return Task.Run(async () =>
{
TData obj = new TData();
long jobId = 0;
JobDataMap jobData = null;
AutoJobEntity dbJobEntity = null;
try
{
jobData = context.JobDetail.JobDataMap;
jobId = jobData["Id"].ParseToLong();
// 获取数据库中的任务
dbJobEntity = await autoJobService.GetEntity(jobId);
if (dbJobEntity != null)
{
if (dbJobEntity.JobStatus == StatusEnum.Yes.ParseToInt())
{
CronTriggerImpl trigger = context.Trigger as CronTriggerImpl;
if (trigger != null)
{
if (trigger.CronExpressionString != dbJobEntity.CronExpression)
{
// 更新任务周期
trigger.CronExpressionString = dbJobEntity.CronExpression;
await JobScheduler.GetScheduler().RescheduleJob(trigger.Key, trigger);
} #region 执行任务
switch (context.JobDetail.Key.Name)
{
case "数据库备份":
obj = await new DatabasesBackupJob().Start();
break;
case "测试任务计划":
obj = await new TestConsoleJob().Start();
break;
}
#endregion
}
}
}
}
catch (Exception ex)
{
obj.Message = ex.GetOriginalException().Message;
LogHelper.Error(ex);
} try
{
if (dbJobEntity != null)
{
if (dbJobEntity.JobStatus == StatusEnum.Yes.ParseToInt())
{
#region 更新下次运行时间
await autoJobService.SaveForm(new AutoJobEntity
{
Id = dbJobEntity.Id,
NextStartTime = context.NextFireTimeUtc.Value.DateTime.AddHours(8)
});
#endregion #region 记录执行状态
await autoJobLogService.SaveForm(new AutoJobLogEntity
{
JobGroupName = context.JobDetail.Key.Group,
JobName = context.JobDetail.Key.Name,
LogStatus = obj.Tag,
Remark = obj.Message
});
#endregion
}
}
}
catch (Exception ex)
{
obj.Message = ex.GetOriginalException().Message;
LogHelper.Error(ex);
}
});
}
}
}
4.添加任务计划,测试


开源框架YiShaAdmin如何使用任务计划的更多相关文章
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- Scut游戏服务器免费开源框架-3
Scut游戏服务器免费开源框架--快速开发(3) Scut快速开发(3) 1 开发环境 需要安装的软件 a) 消息队列 b) 数据库,Sql2005以上版本 ...
- 值得学习的C/C++开源框架(转)
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
- .Net开源框架列表
API 框架 NancyFx:轻量.用于构建 HTTP 基础服务的非正式(low-ceremony)框架,基于.Net 及 Mono 平台.官网 ASP.NET WebAPI:快捷创建 HTTP 服务 ...
- 值得推荐的C/C++开源框架和库
值得推荐的C/C++开源框架和库 转自:http://www.cnblogs.com/lidabo/p/5514155.html - 1. Webbench Webbench是一个在Linux下 ...
- C++的一些不错开源框架,可以学习和借鉴
from https://www.cnblogs.com/charlesblc/p/5703557.html [本文系外部转贴,原文地址:http://coolshell.info/c/c++/201 ...
- 关于Farseer.net轻量级ORM开源框架 V1.0 概念版本开发的消息
V0.2版的开源距离今天(05年03月)已有近3年的时间.可以说这个版本已经有点落伍的感觉了,呵呵. V0.2版至今一直处于BUG的修复及一些细小功能的增加,所以版本号上一直没有变化. 其实在这1.2 ...
- Android开源框架ViewPageIndicator和ViewPager实现Tab导航
前言: 关于使用ViewPageIndicator和ViewPager实现Tab导航,在开发社区里已经有一堆的博客对其进行了介绍,假设我还在这里写怎样去实现.那简直就是老生常谈,毫无新奇感,并且.我也 ...
随机推荐
- redis事务及相关命令介绍
redis事务及相关命令介绍 一.概述:和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事 ...
- java并发lock锁详解和使用
一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 在上面一篇文章中,我们了解到如果一个代码块被syn ...
- 如何创建spring web 工程
在项目资源管理器右键,New-Spring Starter Proje 设置一些参数 点击Next,然后勾选两个选项
- websocket 实现简单网页版wechat
1.群聊 web - socket--基于TCP/UDP http - 无状态的短链接 长连接:客户端和服务器保持永久性的链接,除非有一方主动断开, 轮询:客户端和服务端不断连接,然后断开,请求响应; ...
- npm run start 后台运行
yum provides */nohup nohup npm start & 原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用. 停止程序 ps -ef ...
- c++中的左值和右值的理解
1.左值和右值的概念 C++中左值(lvalue)和右值(rvalue)是比较基础的概念,虽然平常几乎用不到,但C++11之后变得十分重要,它是理解 move/forward 等新语义的基础. 左值与 ...
- HTTP-完整状态码表
HTTP状态码列表: 状态码 状态码英文名称 中文描述 100 Continue 继续.客户端应继续其请求 101 Switching Protocols 切换协议.服务器根据客户端的请求切换协议.只 ...
- canvas元素内容生成图像文件
准备工作 想要将canvas元素当前显示的内容生成为图像文件,我们首先要获取canvas中的数据,在HTML5 <canvas>元素的标准中提供了toDataURL()的方法可以将canv ...
- 在TypeScript项目中进行BDD测试
在TypeScript项目中进行BDD测试 什么是BDD? BDD(Behavior-Driven Design)是软件团队的一种工作方式,通过以下方式缩小业务人员和技术人员之间的差距: 鼓励跨角色协 ...
- 用 rollup + gulp 造个轮子,别说还挺香
前戏 我是16年入了前端的坑,17年知道了gulp和rollup这两个玩意儿.由于那时webpack势头很猛,便一直没有正眼瞧过它一眼. 直到20年进了一家小公司,做了很多类似的小项目,相同的代码拷来 ...