当前位置:网站首页 / C#人爱学不学 / 正文

[ay的quartz.net 学习笔记[3/5]

时间:2017年11月10日 | 作者 : aaronyang | 分类 : C#人爱学不学 | 浏览: 146次 | 评论 0

Quartz.Net插件

TriggerListener,JobListener

Cron表达式

Quartz.Net线程池

ISchedulerPlugin接口

    public class MyPlugin : Quartz.Spi.ISchedulerPlugin
    {
        public void Initialize(string pluginName, IScheduler sched)
        {
            Console.WriteLine("实例化");
        }
        public void Start()
        {
            Console.WriteLine("启动");
        }
        public void Shutdown()
        {
            Console.WriteLine("关闭");
        }
    }

主函数里面配置要实现的插件

        static void Main(string[] args)
        {
            var properties = new NameValueCollection();
            //MyPlugin 自定义名称。    "命名空间.类名,程序名称"
            properties["quartz.plugin.MyPlugin.type"] = "AyQzDemo.MyPlugin,AyQzDemo";

            var schedulerFactory = new StdSchedulerFactory(properties);
            var scheduler = schedulerFactory.GetScheduler();

            var job = JobBuilder.Create<HelloJob>()
                .WithIdentity("myJob", "group1")
                .Build();

            var trigger = TriggerBuilder.Create()
                                .WithIdentity("mytrigger", "group1")
                                .WithCronSchedule("/2 * * ? * *")
                                .Build();

            scheduler.ScheduleJob(job, trigger);
            scheduler.Start();
            System.Threading.Thread.Sleep(6000);
            scheduler.Shutdown(true);
            Console.ReadLine();

blob.png

TriggerListener,JobListener

百度一搜几乎都是  java的用法,自己摸索如下

查看  quartz的一个源码

blob.png

有个triggerlistener.name要设置

代码如下:

  namespace AyQzDemo
{
    public class HelloJob : IJob
    {       int index = 1;
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("AY: Hello "+ (index++));
        }
    }
 public class MyPlugin : Quartz.Spi.ISchedulerPlugin
    {
        public void Initialize(string pluginName, IScheduler sched)
        {
            Console.WriteLine("实例化");
        }
        public void Start()
        {
            Console.WriteLine("启动");
        }
        public void Shutdown()
        {
            Console.WriteLine("关闭");
        }
    }

    public class MyTriggerListener : ITriggerListener
    {
        private string name= "MyTriggerListener"; //2017-11-10 14:56:42 ay设置

        public void TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode)
        {
            Console.WriteLine("job完成时调用");
        }
        public void TriggerFired(ITrigger trigger, IJobExecutionContext context)
        {
            Console.WriteLine("job执行时调用");
        }
        public void TriggerMisfired(ITrigger trigger)
        {
            Console.WriteLine("错过触发时调用(例:线程不够用的情况下)");
        }
        public bool VetoJobExecution(ITrigger trigger, IJobExecutionContext context)
        {
            //Trigger触发后,job执行时调用本方法。true即否决,job后面不执行。
            return false;
        }
        public string Name { get { return name; } set { name = value; } }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var properties = new NameValueCollection();
            //MyPlugin 自定义名称。    "命名空间.类名,程序名称"
            properties["quartz.plugin.MyPlugin.type"] = "AyQzDemo.MyPlugin,AyQzDemo";

            var schedulerFactory = new StdSchedulerFactory(properties);
            var scheduler = schedulerFactory.GetScheduler();

            var job = JobBuilder.Create<HelloJob>()
                .WithIdentity("myJob", "group1")
                .Build();

            var trigger = TriggerBuilder.Create()
                                .WithIdentity("mytrigger", "group1")
                                .WithCronSchedule("/2 * * ? * *")
                                .Build();
            MyTriggerListener myJobListener = new MyTriggerListener();
            scheduler.ListenerManager.AddTriggerListener(myJobListener, Quartz.Impl.Matchers.KeyMatcher<TriggerKey>.KeyEquals(new TriggerKey("mytrigger", "group1")));

            scheduler.ScheduleJob(job, trigger);
            scheduler.Start();
            System.Threading.Thread.Sleep(6000);
            scheduler.Shutdown(true);
            Console.ReadLine();











        }
    }

blob.png

有点像拦截器,执行前和执行后,

////添加监听器到指定分类的所有监听器。

 //scheduler.ListenerManager.AddTriggerListener(myJobListener, GroupMatcher<TriggerKey>.GroupEquals("myJobGroup"));

////添加监听器到指定的2个分组。

 //scheduler.ListenerManager.AddTriggerListener(myJobListener, GroupMatcher<TriggerKey>.GroupEquals("myJobGroup"), GroupMatcher<TriggerKey>.GroupEquals("myJobGroup2"));

 ////添加监听器到所有的触发器上。

 //scheduler.ListenerManager.AddTriggerListener(myJobListener, GroupMatcher<TriggerKey>.AnyGroup());

 

字段名 允许的值 允许的特殊字符

Seconds 0-59    , - * /

Minutes 0-59    , - * /

Hours 0-23    , - * /

Day of month    1-31  , - * ? / L W

Month        1-12 or JAN-DEC   , - * /

Day of week     1-7 or SUN-SAT  , - * ? / L #

Year        空, 1970-2099  , - * /



特殊字符 解释

, 或的意思。例:分钟位 5,10  即第5分钟或10分都触发。 

/ a/b。 a:代表起始时间,b频率时间。 例; 分钟位  3/5,  从第三分钟开始,每5分钟执行一次。

* 频率。 即每一次波动。    例;分钟位 *  即表示每分钟 

- 区间。  例: 分钟位   5-10 即5到10分期间。 

? 任意值 。   即每一次波动。只能用在DayofMonth和DayofWeek,二者冲突。指定一个另一个一个要用?

L 表示最后。 只能用在DayofMonth和DayofWeek,4L即最后一个星期三

W 工作日。  表示最后。 只能用在DayofWeek

# 4#2。 只能用DayofMonth。 某月的第二个星期三  


实例介绍

”0 0 10,14,16 * * ?"    每天10点,14点,16点 触发。

"0 0/5 14,18 * * ?"    每天14点或18点中,每5分钟触发 。

"0 4/15 14-18 * * ?"       每天14点到18点期间,  从第四分钟触发,每15分钟一次。

"0 15 10 ? * 6L"        每月的最后一个星期五上午10:15触发。


properties["quartz.threadPool.threadCount"] = "5";  

这个线程池的设置,是指同时间,调度器能执行Job的最大数量。

quartz是用每个线程跑一个job。上面的设置可以解释是job并发时能执行5个job,剩下的job如果触发时间恰好到了,当前job会进入暂停状态,直到有可用的线程。

如果在指定的时间范围依旧没有可用线程,会触发misfired时间。

quartz 提供了IThreadPool接口,也可以用自定义线程池来实现。

配置如下:

properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; 

一般来说作业调度很少并发触发大量job,如果有上百个JOB,可在服务器承受范围内适量增加线程数量


文章参考:http://www.cnblogs.com/mushroom/p/4104484.html#3759345


====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========



















































推荐您阅读更多有关于“”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

作者:杨洋(AaronYang简称AY,安徽六安人)

时间:2015年1月17日,高中学历,兴趣学习研究WPF

声明:AYUI开发与商用免费,源码可购买。部分DEMO不免费

开源不是责任,合理的收入可以维护项目的发展和服务器和域名的费用。非客户加好友不提供技术服务

查看捐款记录

AYUI7.2.4 MVC教程 更新如下:

2017-10-29 第一课
2017-10-30 第二课

AYUI程序加密教程教程下载

兼容:XP到win10,vs2012到2017

最新版本:AYUI 7.2.5.5

一次购买,免费更新,bug及时修复,AY一人开发,普通话沟通问题。3个月技术支持

AYUI7.2.5.5 DLL企业服务详情:600元

AYUI7.2.5.5 官方风格全源码详情:4000元

AYUI7.2.5.5 医疗风格全源码详情:5000元

本AYUI知识版权最终归杨洋(AY)所有

本AYUI最终销售权归杨洋(AY)所有

WPF群 WPF UI之美     联系AY: 点击这里给我发消息

  AY的WPF视频
  AYUI 版本说明

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表