quartz框架入门demo(Quartz-作业调度框架-插件化开发)
大部分业务都是基于定时的任务,特别适合使用quartz这类框架解决定时问题。具体quartz的使用,看官方文档就可以了。下面谈谈对quartz插件化的封装。我们使用quartz.plugin。然后在quartz_Jobs.xml方法里面定义了schedule,其中灵活的地方在于,里面定义了Jobs的属性,在QuartzPlugin的start方法执行的时候,会去加载quartz_jobs文件,逐个job信息进行加载。
解决思路在实际使用中,开发就变得相对简单了,不需要关注job任务是如何被调度的。只需要在程序中定义一个类实现job接口,填充业务代码,然后在文件里面填写该job属性:
[DisallowConcurrentExecution]
public class AnalysisJob : IJob
{
public void Execute(IJobExecutionContext context)
{
xxxxxxxxxx
}
}
<job>
<name>名称</name>
<group>分组</group>
<description>描述</description>
<job-type>类库</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
这样的封装就赋予框架新的技能,大大提高了开发人员的开发效率。
主要代码
using System;
using System.Collections.Generic;
using System.Linq;
using Topshelf;
namespace HSCP.Task
{
class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<MainService>((s) =>
{
s.ConstructUsing(settings => new MainService);
s.WhenStarted(tr => tr.Start);
s.WhenStopped(tr => tr.Stop);
});
x.RunAsLocalSystem;
x.SetDescription("");
x.SetDisplayName("xxxx任务管理器");
x.SetServiceName("HSCP.Task");
});
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;
namespace HSCP.Task
{
class MainService
{
static IScheduler sched;
public void Start
{
try
{
ISchedulerFactory factory = new StdSchedulerFactory;
sched = factory.GetScheduler;
sched.Start;
Console.WriteLine($"共 {sched.GetJobGroupNames.Count} 任务");
foreach (string gn in sched.GetJobGroupNames)
Console.WriteLine(gn);
}
catch (Exception exc)
{
Console.WriteLine(exc.ToString);
}
// NLogger.Info(string.Format("启动成功 {0}", DateTime.Now));
}
public void Stop
{
sched.Shutdown(true);
}
}
}
https://github.com/quartznet/quartznet
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com