程序地带

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


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lyl6796910/p/14265342.html

随机推荐

React 中实现复制到剪切板功能

React中实现复制到剪切板功能前言最终实现方法中间踩坑前言最近有一个需求是在文章列表中实现一个【复制链接】的功能。如图:点击【复制链接】之后,链接将复制到剪切板。可在浏览...

杏子_1024 阅读(859)

Idea控制台中文乱码问题

1.问题2.解决选择当前运行的项目:在VMortions一栏加入-Dfile.encoding=UTF-8再次运行项目,问题解决。...

qq_44783204 阅读(292)

IAT数组一定要指向 Hint/name吗

不用,只要不为0就好了,IAT是由PE装载器填入地址的,不用自己填 Hint值一定要为ordinal吗?有函数名的可以随便写,没有的要和ordi...

qq_39921539 阅读(229)

电池供电的电容麦_电容麦受潮了,怎么办?

电池供电的电容麦_电容麦受潮了,怎么办?

听说许多人对电容话筒不了解,有人以为电容话筒可以直接插在电脑主板上用,有些人以为电容话筒可以插在卡拉ok的大两芯话筒口上用,有人以为电容话筒一定要独立的48V...

tyotakuki 阅读(873)

关于MessageFormat.format文字格式化的使用

最近的工作中涉及到将时间转换为中文的固定格式:获取的时间:需要的时间格式:自2020年01月02日零时起至2021年01月02日二十四时止。方案:1,创建一个常量字符串,将要替换的时间用{}代替,并定...

Bruk.Liu 阅读(988)

解决maven的webapp项目创建过慢问题

1.先创建maven工程2.输入项目名称,并点击Next3.点击Properties下右侧的“+”号,添加新的键值对。Name:archetypeCatalog。V...

肝帝程序员 阅读(972)