ABP+AdminLTE+Bootstrap Table权限管理系统一期
Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate-Project-CMS
Quartz简介
Quartz.NET是一个开源的作业调度框架,是 OpenSymphony
的 Quartz API
的.NET移植,它用C#写成,可用于winform
和asp.net
应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like
表达式等等。非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等.
参考
对Quartz.NET不熟悉的可以先看下
官方学习文档:http://www.quartz-scheduler.net/documentation/index.html
使用实例介绍:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
官方的源代码下载:http://sourceforge.net/projects/quartznet/files/quartznet/
特性
它一些很好的特性:
1. 支持集群,作业分组,作业远程管理。
2. 自定义精细的时间触发器,使用简单,作业和触发分离。
3. 数据库支持,可以寄宿Windows
服务,WebSite
,winform
等。
Quartz框架的一些基础概念解释:
名称 | 描述 |
---|---|
Scheduler | 作业调度器。 |
IJob | 作业接口,继承并实现Execute, 编写执行的具体作业逻辑。 |
JobBuilder | 根据设置,生成一个详细作业信息(JobDetail)。 |
TriggerBuilder | 根据规则,生产对应的Trig |
实战
- Web.config配置
基础概念我就懒得讲了,你也懒得听了,直接上代码吧。
首先配置一下Web.config
,其实这步可有可无,可以直接跳过,只是为了配置一些常量,获取固定的时间,但是不是必要的。
<sectionGroup name="JobList">
<section name="Job" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</sectionGroup>
<JobList>
<Job>
<!--这里是一个任务节点-->
<add key="Url" value="http://www.baidu.com" />
<!--需要访问的Url-->
<add key="Hour" value="10" />
<!--开始时间小时-->
<!--开始时间小时,注意:这里的小时为0-23,如果是1点的话就是1,而不是01-->
<add key="Minute" value="30" />
<!--开始时间分钟-->
<!--开始时间分钟,注意:同上0-59-->
</Job>
</JobList>
- 创建service
创建ISystemSchedulerService
以及SystemSchedulerService
,代码上面都有详细的注释,我就不重复了。
接口:
public interface ISystemSchedulerService: IApplicationService
{
void StartScheduler();
}
service: SystemSchedulerService
public class SystemSchedulerService : ISystemSchedulerService
{
private IScheduler _scheduler;
public ILogger _Logger { get; set; }
public SystemSchedulerService()
{
_Logger = NullLogger.Instance;
}
public void StopScheduler()
{
_scheduler.Shutdown();
}
public void StartScheduler()
{
try
{
//这里读取配置文件中的任务开始时间
int hour = int.Parse(((NameValueCollection)ConfigurationManager.GetSection("JobList/Job"))["Hour"]);
int minute = int.Parse(((NameValueCollection)ConfigurationManager.GetSection("JobList/Job"))["Minute"]);
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();//内存调度
_sched