亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Quartz.NET開源作業調度框架系列(三):IJobExecutionContext參數傳遞

2019-11-14 13:42:26
字體:
來源:轉載
供稿:網友

  前面寫了關于Quartz.NET開源作業調度框架的入門和Cron Trigger , 這次繼續這個系列, 這次想討論一下Quartz.NET中的Job如何通過執行上下文(Execution Contex)進行參數傳遞 , 有些參數想保存狀態該如何處理 . 在Quartz.NET中可以用JobDataMap進行參數傳遞.本例用Quartz.NET的任務來定期輪詢數據庫表,當數據庫的條目達到一定的數目后,進行預警.(其實可以將讀取的表和預警條件配置到數據庫中的預警條件表中,這樣就可以簡單實現一個自動預警提醒的小平臺).

1 JobWithParametersExample

 1 using System; 2 using System.Threading; 3  4 using Common.Logging; 5 using Quartz; 6 using Quartz.Impl; 7 using Quartz.Job; 8 using Quartz.Impl.Calendar; 9 using Quartz.Impl.Matchers;10 namespace QuartzDemo11 {12 13     public class JobWithParametersExample 14     {15         public string Name16         {17             get { return GetType().Name; }18         }19         PRivate IScheduler sched = null;20         public JobWithParametersExample(IScheduler _sched)21         {22             sched = _sched;23         }24         public virtual void Run()25         {26             27             //2S后執行28             DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 2);29             IJobDetail job1 = JobBuilder.Create<JobWithParameters>()30                 .WithIdentity("job1", "group1")31                 .Build();32 33             ISimpleTrigger trigger1 = (ISimpleTrigger)TriggerBuilder.Create()34                                                            .WithIdentity("trigger1", "group1")35                                                            .StartAt(startTime)36                                                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(100))37                                                            .Build();38 39             // 設置初始參數40             job1.JobDataMap.Put(JobWithParameters.tSQL, "SELECT * FROM [ACT_ID_USER]");41             job1.JobDataMap.Put(JobWithParameters.ExecutionCount, 1);42 43             // 設置監聽器44             JobListener listener = new JobListener();45             IMatcher<JobKey> matcher = KeyMatcher<JobKey>.KeyEquals(job1.Key);46             sched.ListenerManager.AddJobListener(listener, matcher);47 48             // 綁定trigger和job49             sched.ScheduleJob(job1, trigger1);50             //啟動51             sched.Start();52         53         }54     }55 }

  JobWithParametersExample用來配置job和trigger,同時定義了一個監聽器,來監聽定義的job.

2 JobWithParameters

 1 using System; 2 using Common.Logging; 3 using Quartz; 4 using Quartz.Impl; 5 using Quartz.Job; 6 using System.Windows.Forms; 7 namespace QuartzDemo 8 { 9 10     [PersistJobDataAfterExecution]11     [DisallowConcurrentExecution]12     public class JobWithParameters : IJob13     {14     15         // 定義參數常量16         public const string tSQL = "tSQL";17         public const string ExecutionCount = "count";18         public const string RowCount = "rowCount";19         public const string tableAlert = "tAlert"; 20         //  Quartz 每次執行時都會重新實例化一個類, 因此Job類中的非靜態變量不能存儲狀態信息21          private int counter = 1;//都為122         //private static  int counter = 1;//可以保存狀態23         public virtual void Execute(IJobExecutionContext context)24         {25            26             JobKey jobKey = context.JobDetail.Key;27             // 獲取傳遞過來的參數            28             JobDataMap data = context.JobDetail.JobDataMap;29             string SQL = data.GetString(tSQL);30             int count = data.GetInt(ExecutionCount);31 32             if (isOpen("FrmConsole"))33             {34                 try35                 {36                     //獲取當前Form1實例37                     __instance = (FrmConsole)application.OpenForms["FrmConsole"];38                     //獲取當前執行的線程ID39                     __instance.SetInfo(jobKey + "Thread ID " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());40                     //數據庫操作41                     System.Data.DataTable tAlert = SqlHelper.getDateTable(SQL, null);42                     //回寫條數43                     data.Put(RowCount, tAlert.Rows.Count);44                     //通過方法更新消息45                     __instance.SetInfo(string.Format("{0} exec {1} = {2} get {3} rows/r/n           execution count (from job map) is {4}/r/n           execution count (from job member variable) is {5}",46                     jobKey,47                     tSQL,48                     SQL,49                     tAlert.Rows.Count,50                     count, counter));51                     //怎么取出Datatable ? json to datatable52                     //data.Put(tableAlert, tAlert);            53                 }54                 catch (Exception ex)55                 {56                     Console.WriteLine(ex.Message);57                 }58             }59             // 修改執行計數并回寫到job data map中60             count++;61             data.Put(ExecutionCount, count);            62             // 修改本地變量,如果是非靜態變量,不能存儲狀態63             counter++;64         }65 66         private static FrmConsole __instance = null;67      68         /// <summary>69         /// 判斷窗體是否打開70         /// </summary>71         /// <param name="appName"></param>72         /// <returns></returns>73         private bool isOpen(string appName)74         {75             FormCollection collection = Application.OpenForms;76             foreach (Form form in collection)77             {78                 if (form.Name == appName)79                 {80                     return true;81                 }82             }83             return false;84         }85 86     }87 }
Quartz 每次執行時都會重新實例化一個類, 因此Job類中的非靜態變量不能存儲狀態信息.如何要保存狀態信息可以用靜態變量進行處理,也可以用參數值進行傳入傳出來實現.

3 JobListener

 1 using System; 2 using Common.Logging; 3 using Quartz; 4 using Quartz.Impl; 5 using Quartz.Job; 6 namespace QuartzDemo 7 { 8     public class JobListener : IJobListener 9     {10    11         public virtual string Name12         {13             get { return "JobListener"; }14         }15 16         public virtual void JobToBeExecuted(IJobExecutionContext inContext)17         {18             //執行前執行19             Console.WriteLine("JobToBeExecuted");20         }21 22         public virtual void JobExecutionVetoed(IJobExecutionContext inContext)23         {24             //否決時執行25             Console.WriteLine("JobExecutionVetoed");26         }27 28         public virtual void JobWasExecuted(IJobExecutionContext inContext, JobExecutionException inException)29         {30             JobKey jobKey = inContext.JobDetail.Key;31             // 獲取傳遞過來的參數            32             JobDataMap data = inContext.JobDetail.JobDataMap;33             //獲取回傳的數據庫表條目數34             int rowCount = data.GetInt(JobWithParameters.RowCount);35 36             try37             {38                 if (rowCount > 9)39                 {40                     inContext.Scheduler.PauseAll();41                     System.Windows.Forms.MessageBox.Show("預警已超9條");42                     inContext.Scheduler.ResumeAll();43                    44                 }45                 Console.WriteLine(rowCount.ToString());46             }47             catch (SchedulerException e)48             {49              50                 Console.Error.WriteLine(e.StackTrace);51             }52         }53 54     }55 }

4 效果

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产综合在线看| 久久国产精品电影| 亚洲色图35p| 日韩电视剧免费观看网站| 亚洲女人天堂成人av在线| 午夜精品一区二区三区在线视| 国产精品久久中文| 国产欧美日韩丝袜精品一区| 九九视频这里只有精品| 成人免费xxxxx在线观看| 国产精品电影久久久久电影网| 国产精品男人爽免费视频1| 中文字幕综合一区| 91地址最新发布| 久久影院资源站| 日本久久久久久| 正在播放欧美一区| 国产日韩精品电影| 一区二区亚洲欧洲国产日韩| 成人网欧美在线视频| 国产精品私拍pans大尺度在线| 91成人福利在线| 岛国精品视频在线播放| 亚洲精品国产品国语在线| 欧美成人激情视频免费观看| 日韩一区二区欧美| 中文字幕国产亚洲2019| 日韩欧美在线看| 国产成人中文字幕| 亚洲电影成人av99爱色| 国内久久久精品| www.精品av.com| 国产在线视频欧美| 亚洲午夜精品久久久久久久久久久久| 黄色91在线观看| 国产成人一区二| 久久亚洲精品视频| 欧美激情乱人伦一区| 欧美日韩高清在线观看| 这里只有精品在线观看| 精品亚洲aⅴ在线观看| 午夜美女久久久久爽久久| 成人疯狂猛交xxx| 国产精品99久久99久久久二8| 久久久久久免费精品| 国产精品成人观看视频国产奇米| 国产免费一区二区三区香蕉精| 日韩av电影院| 日韩成人中文字幕在线观看| 欧美成人国产va精品日本一级| 日韩av在线免播放器| 69精品小视频| 精品动漫一区二区| 国产一区在线播放| 国产精品h片在线播放| 91精品国产九九九久久久亚洲| 7777kkkk成人观看| 欧美精品电影免费在线观看| 伊人久久久久久久久久| 成人在线小视频| 午夜精品一区二区三区在线视| 精品中文字幕在线2019| 九九热视频这里只有精品| 欧美性开放视频| 日韩在线视频线视频免费网站| 久久精品视频亚洲| 九九热99久久久国产盗摄| 国外视频精品毛片| 国产精品网站视频| 国产日韩在线一区| 欧美成人精品在线视频| 欧美激情在线观看视频| 亚洲午夜精品久久久久久性色| 一区二区三区回区在观看免费视频| 热草久综合在线| 欧美精品在线免费| 欧美日韩国产中文字幕| 亚洲综合自拍一区| 亚洲欧美日韩中文在线| 欧美成年人网站| 91国产美女在线观看| 亚洲区免费影片| 亚洲美女性生活视频| 日韩www在线| 久久久欧美精品| 中文字幕日韩综合av| 日韩天堂在线视频| 国产欧美日韩免费| 国产视频综合在线| 欧美一级黄色网| 最新69国产成人精品视频免费| 亚洲国产精品va在线观看黑人| 91精品久久久久久久久久久| 97精品在线视频| 亚洲一区亚洲二区| 成人网欧美在线视频| 精品久久久久久久久久久久久| 欧美理论电影在线播放| 欧美一区二区大胆人体摄影专业网站| 欧美成人剧情片在线观看| 欧美性xxxx极品hd满灌| 国产亚洲一区二区精品| 亚洲最大的av网站| 国产一区视频在线播放| 久久久久久亚洲精品不卡| 久久亚洲精品成人| 欧美午夜女人视频在线| 欧美日本中文字幕| 亚洲毛片在线观看.| 亚洲精品456在线播放狼人| 国产不卡视频在线| 在线观看成人黄色| 欧美成人精品在线| 欧美老女人bb| 日韩专区中文字幕| 久久亚洲综合国产精品99麻豆精品福利| 亚洲精品午夜精品| 91亚洲精品久久久| 亚洲在线视频福利| 日韩精品视频免费专区在线播放| 在线看欧美日韩| 午夜精品久久久99热福利| 亚洲国产美女精品久久久久∴| 91香蕉嫩草影院入口| 国产va免费精品高清在线| 欧美国产日韩精品| 一区二区三区回区在观看免费视频| 97超级碰碰碰久久久| 久久久久久久香蕉网| 久久99热这里只有精品国产| 亚洲第一区第二区| 久久久久久久97| 久久国产一区二区三区| 按摩亚洲人久久| 欧美日韩在线观看视频小说| 91av在线影院| 精品一区二区三区四区在线| 国产欧美在线视频| 中文字幕自拍vr一区二区三区| 欧美在线视频免费| 欧美激情精品久久久久久久变态| 欧美成aaa人片免费看| 亚洲最新在线视频| 亚洲精品影视在线观看| 成人444kkkk在线观看| 日韩经典一区二区三区| 国产精品一区二区电影| 亚洲美女视频网站| 国产精品免费久久久久久| 中文.日本.精品| 一本色道久久88综合日韩精品| 97av视频在线| 亚洲无亚洲人成网站77777| 亚洲男人天堂2023| 91久久精品国产91久久| 日韩av最新在线| 欧美wwwxxxx| 欧美视频专区一二在线观看| 成人a在线观看| 日韩av在线最新| 欧美色欧美亚洲高清在线视频| 亚洲人a成www在线影院| 国产成+人+综合+亚洲欧美丁香花| 91网站免费看|