Quartz.net 定时任务之Cron表达式

一、cron表达式简单介绍和下载

  1、在上一篇博客“Quartz.net 定时任务之简单任务”中,我简单介绍了quartz的使用,而这篇博客我将介绍cron的具体使用(不足之处望大神斧正)

  1、cron是为了方便编写定时执行作业时间扩展出来的插件,这个有很多版本(网页版,窗体版等),cron表达式的存在,从而大大减低设置作业人员的操作难度和开发人员的编写难度。

  2、cron表达式下载地址:https://www.oschina.net/code/snippet_98719_23426 下载下来之后,我打开页面我们会看到如下的界面  (为网页版)

  

   注:如果网页路径失效,或者下载失败的码友,请不要着急,继续往下看

二、cron表达式的使用

  1、在网上也看到了很多关于cron的使用说明的文章(在此感谢各位好心分享的大神),运用cron表达式有2个关键的地方

    (1)、cron的怎么使用到项目中?

    (2)、cron表达式怎么反解析到对应的输入框中?

  2、cron运用到项目中和反解析

    (1)、在上一篇博客中,我简单介绍了quartz的使用,从而会有一些小bug和美观不足的缺点,在编写这篇博客之前我做了小小的美化,如下图

  

  注:模板是使用的layer后台框架   模板编写者:Layui_初学者 

  laery下载地址:http://layer.layui.com/  

  (2)、这次美化之后后台的架构也做了小小的变化。下面截图说明

  

 (3)、把下载好的layer放在Js->lib->layer文件夹下  说明Js->lib文件夹下放了jquery 这里不做介绍

 (4)、好了回归正题,在大家在上面的截图可以看出,下载下来的Cron表达式存放路径是在Content->Cron 路径,下面我们需要一个容器来放cron的页面,建立控制器(Quartz)如下

  

  可以看到在quartz控制器里面我们建立了2个视图 CronUse 视图、SetCron视图,不难看出两个视图的作用  CronUse视图是我们使用Cron的视图,SetCron是我们设置Cron的视图

  (5)、2个视图分别建好之后,我们在CronUse视图编写如下代码

 1 @{
 2     ViewBag.Title = "Cron的使用";
 3     Layout = "~/Views/Shared/_Layout.cshtml";
 4 }
 5 <link href="~/Content/BeginnerAdmin/plugins/layui/css/layui.css" rel="stylesheet" />
 6 <link href="~/Content/BeginnerAdmin/css/global.css" rel="stylesheet" />
 7 <script src="~/Js/lib/jquery-3.2.1/jquery-3.2.1.js"></script>
 8 <script src="~/Js/lib/layer/layer.js"></script>
 9 <script src="~/Js/lib/jquery-3.2.1/jquery-3.2.1.min.js"></script>
10 
11 
12 <div class="layui-form-item">
13     <label class="layui-form-label">Cron表达式</label>
14     <div class="layui-input-block" style="width:200px">
15         <input type="text" id="Cron" name="title" onclick="SetCron()" required lay-verify="required" placeholder="点击设置Cron表达式" autocomplete="off" class="layui-input">
16     </div>
17 </div>
18 
19 <fieldset class="layui-elem-field site-demo-button">
20     <legend>任务控制区</legend>
21     <div>
22         <button id="OpenTask" class="layui-btn">开启任务</button>
23         <button id="CloseTask" class="layui-btn layui-btn-danger">关闭任务</button>
24     </div>
25 </fieldset>
26 
27 <script type="text/javascript">
28     function SetCron() {
29         layer.open({
30             type: 2,
31             area: ['870px', '660px'],
32             fixed: false, //不固定
33             maxmin: true,
34             content: '/Quartz/SetCron'
35         });
36        // window.open("/Quartz/SetCron", "", "top=100,left=300,width=870,height=660");
37     }
38 
39     $(document).ready(function () {
40         $("#OpenTask").click(function () {
41             var cron = $("#Cron").val();
42             if (cron === '') {
43                 layer.tips('请设置Cron表达式', '#Cron', {
44                     tips: 3
45                 });
46                 return false;
47             }
48             $.ajax({
49                 url: "CronQuartzs",
50                 type: 'post',
51                 data: { cron: cron },
52                 dataType: "json",
53                 async: "false",
54                 success: function (data) {
55                     if (data.ResultSign === 0) {
56                         layer.alert("开启成功");
57                     } else {
58                         layer.alert("开启失败--" + "错误信息:" + data.Message);
59                     }
60                 }
61             });
62         });
63         $("#CloseTask").click(function () {
64             $.ajax({
65                 url: "CloseTask",
66                 type: 'post',
67                 data: {},
68                 dataType: "json",
69                 async: "false",
70                 success: function (data) {
71                     if (data.ResultSign === 0) {
72                         layer.alert("关闭成功");
73                     } else {
74                         layer.alert("关闭失败--" + "错误信息:" + data.Message);
75                     }
76                 }
77             });
78         });
79     });
80 </script>
View Code

  (6)、在SetCron视图编写如下代码

  1 @{
  2     ViewBag.Title = "设置Cron";
  3     Layout = null;
  4 }
  5 
  6 <!DOCTYPE html>
  7 <html>
  8 <head>
  9     <title>Cron表达式生成器</title>
 10     <link href="~/Content/Cron/easyui.css" rel="stylesheet" type="text/css" />
 11     <link href="~/Content/Cron/icon.css" rel="stylesheet" type="text/css" />
 12     <script src="~/Js/lib/jquery-3.2.1/jquery-3.2.1.min.js"></script>
 13     <script src="~/Content/Cron/jquery.easyui.min.js" type="text/javascript"></script>
 14     <script src="~/Content/Cron/cron.js" type="text/javascript"></script>
 15     <script src="~/Js/lib/layer/layer.js"></script>
 16     <style type="text/css">
 17         .line {
 18             height: 25px;
 19             line-height: 25px;
 20             margin: 3px;
 21         }
 22 
 23         .imp {
 24             padding-left: 25px;
 25         }
 26 
 27         .col {
 28             width: 95px;
 29         }
 30     </style>
 31     @*来源于http://jason.hahuachou.com/cron/index.htm网站,并下载源代码。*@
 32 </head>
 33 <body>
 34 
 35     <center>
 36         <div class="easyui-layout" style="width: 830px; height: 540px; border: 1px rgb(202, 196, 196) solid;
 37                                            border-radius: 5px;">
 38             <div style="height: 100%;">
 39                 <div class="easyui-tabs" data-options="fit:true,border:false">
 40                     <div title="">
 41                         <div class="line">
 42                             <input type="radio" checked="checked" name="second" onclick="everyTime(this)">
 43                             每秒 允许的通配符[, - * /]
 44                         </div>
 45                         <div class="line">
 46                             <input type="radio" name="second" onclick="cycle(this)">
 47                             周期从
 48                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:58" value="1"
 49                                    id="secondStart_0">
 50                             -
 51                             <input class="numberspinner" style="width: 60px;" data-options="min:2,max:59" value="2"
 52                                    id="secondEnd_0">
 53  54                         </div>
 55                         <div class="line">
 56                             <input type="radio" name="second" onclick="startOn(this)">
 57  58                             <input class="numberspinner" style="width: 60px;" data-options="min:0,max:59" value="0"
 59                                    id="secondStart_1">
 60                             秒开始,每
 61                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:59" value="1"
 62                                    id="secondEnd_1">
 63                             秒执行一次
 64                         </div>
 65                         <div class="line">
 66                             <input type="radio" name="second" id="sencond_appoint">
 67                             指定每分钟在第几秒执行
 68                         </div>
 69                         <div class="imp secondList">
 70                             <input type="checkbox" value="1">01
 71                             <input type="checkbox" value="2">02
 72                             <input type="checkbox" value="3">03
 73                             <input type="checkbox" value="4">04
 74                             <input type="checkbox" value="5">05
 75                             <input type="checkbox" value="6">06
 76                             <input type="checkbox" value="7">07
 77                             <input type="checkbox" value="8">08
 78                             <input type="checkbox" value="9">09
 79                             <input type="checkbox" value="10">10
 80                         </div>
 81                         <div class="imp secondList">
 82                             <input type="checkbox" value="11">11
 83                             <input type="checkbox" value="12">12
 84                             <input type="checkbox" value="13">13
 85                             <input type="checkbox" value="14">14
 86                             <input type="checkbox" value="15">15
 87                             <input type="checkbox" value="16">16
 88                             <input type="checkbox" value="17">17
 89                             <input type="checkbox" value="18">18
 90                             <input type="checkbox" value="19">19
 91                             <input type="checkbox" value="20">20
 92                         </div>
 93                         <div class="imp secondList">
 94                             <input type="checkbox" value="21">21
 95                             <input type="checkbox" value="22">22
 96                             <input type="checkbox" value="23">23
 97                             <input type="checkbox" value="24">24
 98                             <input type="checkbox" value="25">25
 99                             <input type="checkbox" value="26">26
100                             <input type="checkbox" value="27">27
101                             <input type="checkbox" value="28">28
102                             <input type="checkbox" value="29">29
103                             <input type="checkbox" value="30">30
104                         </div>
105                         <div class="imp secondList">
106                             <input type="checkbox" value="31">31
107                             <input type="checkbox" value="32">32
108                             <input type="checkbox" value="33">33
109                             <input type="checkbox" value="34">34
110                             <input type="checkbox" value="35">35
111                             <input type="checkbox" value="36">36
112                             <input type="checkbox" value="37">37
113                             <input type="checkbox" value="38">38
114                             <input type="checkbox" value="39">39
115                             <input type="checkbox" value="40">40
116                         </div>
117                         <div class="imp secondList">
118                             <input type="checkbox" value="41">41
119                             <input type="checkbox" value="42">42
120                             <input type="checkbox" value="43">43
121                             <input type="checkbox" value="44">44
122                             <input type="checkbox" value="45">45
123                             <input type="checkbox" value="46">46
124                             <input type="checkbox" value="47">47
125                             <input type="checkbox" value="48">48
126                             <input type="checkbox" value="49">49
127                             <input type="checkbox" value="50">50
128                         </div>
129                         <div class="imp secondList">
130                             <input type="checkbox" value="51">51
131                             <input type="checkbox" value="52">52
132                             <input type="checkbox" value="53">53
133                             <input type="checkbox" value="54">54
134                             <input type="checkbox" value="55">55
135                             <input type="checkbox" value="56">56
136                             <input type="checkbox" value="57">57
137                             <input type="checkbox" value="58">58
138                             <input type="checkbox" value="59">59
139                         </div>
140                     </div>
141                     <div title="分钟">
142                         <div class="line">
143                             <input type="radio" checked="checked" name="min" onclick="everyTime(this)">
144                             分钟 允许的通配符[, - * /]
145                         </div>
146                         <div class="line">
147                             <input type="radio" name="min" onclick="cycle(this)">
148                             周期从
149                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:58" value="1"
150                                    id="minStart_0">
151                             -
152                             <input class="numberspinner" style="width: 60px;" data-options="min:2,max:59" value="2"
153                                    id="minEnd_0">
154                             分钟
155                         </div>
156                         <div class="line">
157                             <input type="radio" name="min" onclick="startOn(this)">
158 159                             <input class="numberspinner" style="width: 60px;" data-options="min:0,max:59" value="0"
160                                    id="minStart_1">
161                             分钟开始,每
162                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:59" value="1"
163                                    id="minEnd_1">
164                             分钟执行一次
165                         </div>
166                         <div class="line">
167                             <input type="radio" name="min" id="min_appoint">
168                             指定每小时在第几分执行
169                         </div>
170                         <div class="imp minList">
171                             <input type="checkbox" value="1">01
172                             <input type="checkbox" value="2">02
173                             <input type="checkbox" value="3">03
174                             <input type="checkbox" value="4">04
175                             <input type="checkbox" value="5">05
176                             <input type="checkbox" value="6">06
177                             <input type="checkbox" value="7">07
178                             <input type="checkbox" value="8">08
179                             <input type="checkbox" value="9">09
180                             <input type="checkbox" value="10">10
181                         </div>
182                         <div class="imp minList">
183                             <input type="checkbox" value="11">11
184                             <input type="checkbox" value="12">12
185                             <input type="checkbox" value="13">13
186                             <input type="checkbox" value="14">14
187                             <input type="checkbox" value="15">15
188                             <input type="checkbox" value="16">16
189                             <input type="checkbox" value="17">17
190                             <input type="checkbox" value="18">18
191                             <input type="checkbox" value="19">19
192                             <input type="checkbox" value="20">20
193                         </div>
194                         <div class="imp minList">
195                             <input type="checkbox" value="21">21
196                             <input type="checkbox" value="22">22
197                             <input type="checkbox" value="23">23
198                             <input type="checkbox" value="24">24
199                             <input type="checkbox" value="25">25
200                             <input type="checkbox" value="26">26
201                             <input type="checkbox" value="27">27
202                             <input type="checkbox" value="28">28
203                             <input type="checkbox" value="29">29
204                             <input type="checkbox" value="30">30
205                         </div>
206                         <div class="imp minList">
207                             <input type="checkbox" value="31">31
208                             <input type="checkbox" value="32">32
209                             <input type="checkbox" value="33">33
210                             <input type="checkbox" value="34">34
211                             <input type="checkbox" value="35">35
212                             <input type="checkbox" value="36">36
213                             <input type="checkbox" value="37">37
214                             <input type="checkbox" value="38">38
215                             <input type="checkbox" value="39">39
216                             <input type="checkbox" value="40">40
217                         </div>
218                         <div class="imp minList">
219                             <input type="checkbox" value="41">41
220                             <input type="checkbox" value="42">42
221                             <input type="checkbox" value="43">43
222                             <input type="checkbox" value="44">44
223                             <input type="checkbox" value="45">45
224                             <input type="checkbox" value="46">46
225                             <input type="checkbox" value="47">47
226                             <input type="checkbox" value="48">48
227                             <input type="checkbox" value="49">49
228                             <input type="checkbox" value="50">50
229                         </div>
230                         <div class="imp minList">
231                             <input type="checkbox" value="51">51
232                             <input type="checkbox" value="52">52
233                             <input type="checkbox" value="53">53
234                             <input type="checkbox" value="54">54
235                             <input type="checkbox" value="55">55
236                             <input type="checkbox" value="56">56
237                             <input type="checkbox" value="57">57
238                             <input type="checkbox" value="58">58
239                             <input type="checkbox" value="59">59
240                         </div>
241                     </div>
242                     <div title="小时">
243                         <div class="line">
244                             <input type="radio" checked="checked" name="hour" onclick="everyTime(this)">
245                             小时 允许的通配符[, - * /]
246                         </div>
247                         <div class="line">
248                             <input type="radio" name="hour" onclick="cycle(this)">
249                             周期从
250                             <input class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
251                                    id="hourStart_0">
252                             -
253                             <input class="numberspinner" style="width: 60px;" data-options="min:2,max:23" value="2"
254                                    id="hourEnd_1">
255                             小时
256                         </div>
257                         <div class="line">
258                             <input type="radio" name="hour" onclick="startOn(this)">
259 260                             <input class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
261                                    id="hourStart_1">
262                             小时开始,每
263                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:23" value="1"
264                                    id="hourEnd_1">
265                             小时执行一次
266                         </div>
267                         <div class="line">
268                             <input type="radio" name="hour" id="hour_appoint">
269                             指定每天在第几小时执行
270                         </div>
271                         <div class="imp hourList">
272                             AM:
273                             <input type="checkbox" value="0">00
274                             <input type="checkbox" value="1">01
275                             <input type="checkbox" value="2">02
276                             <input type="checkbox" value="3">03
277                             <input type="checkbox" value="4">04
278                             <input type="checkbox" value="5">05
279                             <input type="checkbox" value="6">06
280                             <input type="checkbox" value="7">07
281                             <input type="checkbox" value="8">08
282                             <input type="checkbox" value="9">09
283                             <input type="checkbox" value="10">10
284                             <input type="checkbox" value="11">11
285                         </div>
286                         <div class="imp hourList">
287                             PM:
288                             <input type="checkbox" value="12">12
289                             <input type="checkbox" value="13">13
290                             <input type="checkbox" value="14">14
291                             <input type="checkbox" value="15">15
292                             <input type="checkbox" value="16">16
293                             <input type="checkbox" value="17">17
294                             <input type="checkbox" value="18">18
295                             <input type="checkbox" value="19">19
296                             <input type="checkbox" value="20">20
297                             <input type="checkbox" value="21">21
298                             <input type="checkbox" value="22">22
299                             <input type="checkbox" value="23">23
300                         </div>
301                     </div>
302                     <div title="">
303                         <div class="line">
304                             <input type="radio" checked="checked" name="day" onclick="everyTime(this)">
305                             日 允许的通配符[, - * / L W]
306                         </div>
307                         <div class="line">
308                             <input type="radio" name="day" onclick="unAppoint(this)">
309                             不指定
310                         </div>
311                         <div class="line">
312                             <input type="radio" name="day" onclick="cycle(this)">
313                             周期从
314                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
315                                    id="dayStart_0">
316                             -
317                             <input class="numberspinner" style="width: 60px;" data-options="min:2,max:31" value="2"
318                                    id="dayEnd_0">
319 320                         </div>
321                         <div class="line">
322                             <input type="radio" name="day" onclick="startOn(this)">
323 324                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
325                                    id="dayStart_1">
326                             日开始,每
327                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
328                                    id="dayEnd_1">
329                             天执行一次
330                         </div>
331                         <div class="line">
332                             <input type="radio" name="day" onclick="workDay(this)">
333                             每月
334                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
335                                    id="dayStart_2">
336                             号最近的那个工作日
337                         </div>
338                         <div class="line">
339                             <input type="radio" name="day" onclick="lastDay(this)">
340                             本月最后一天
341                         </div>
342                         <div class="line">
343                             <input type="radio" name="day" id="day_appoint">
344                             指定每月在第几日执行
345                         </div>
346                         <div class="imp dayList">
347                             <input type="checkbox" value="1">1
348                             <input type="checkbox" value="2">2
349                             <input type="checkbox" value="3">3
350                             <input type="checkbox" value="4">4
351                             <input type="checkbox" value="5">5
352                             <input type="checkbox" value="6">6
353                             <input type="checkbox" value="7">7
354                             <input type="checkbox" value="8">8
355                             <input type="checkbox" value="9">9
356                             <input type="checkbox" value="10">10
357                             <input type="checkbox" value="11">11
358                             <input type="checkbox" value="12">12
359                             <input type="checkbox" value="13">13
360                             <input type="checkbox" value="14">14
361                             <input type="checkbox" value="15">15
362                             <input type="checkbox" value="16">16
363                         </div>
364                         <div class="imp dayList">
365                             <input type="checkbox" value="17">17
366                             <input type="checkbox" value="18">18
367                             <input type="checkbox" value="19">19
368                             <input type="checkbox" value="20">20
369                             <input type="checkbox" value="21">21
370                             <input type="checkbox" value="22">22
371                             <input type="checkbox" value="23">23
372                             <input type="checkbox" value="24">24
373                             <input type="checkbox" value="25">25
374                             <input type="checkbox" value="26">26
375                             <input type="checkbox" value="27">27
376                             <input type="checkbox" value="28">28
377                             <input type="checkbox" value="29">29
378                             <input type="checkbox" value="30">30
379                             <input type="checkbox" value="31">31
380                         </div>
381                     </div>
382                     <div title="">
383                         <div class="line">
384                             <input type="radio" checked="checked" name="mouth" onclick="everyTime(this)">
385                             月 允许的通配符[, - * /]
386                         </div>
387                         <div class="line">
388                             <input type="radio" name="mouth" onclick="unAppoint(this)">
389                             不指定
390                         </div>
391                         <div class="line">
392                             <input type="radio" name="mouth" onclick="cycle(this)">
393                             周期从
394                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
395                                    id="mouthStart_0">
396                             -
397                             <input class="numberspinner" style="width: 60px;" data-options="min:2,max:12" value="2"
398                                    id="mouthEnd_0">
399 400                         </div>
401                         <div class="line">
402                             <input type="radio" name="mouth" onclick="startOn(this)">
403 404                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
405                                    id="mouthStart_1">
406                             日开始,每
407                             <input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
408                                    id="mouthEnd_1">
409                             月执行一次
410                         </div>
411                         <div class="line">
412                             <input type="radio" name="mouth" id="mouth_appoint">
413                             指定每年在第几月执行
414                         </div>
415                         <div class="imp mouthList">
416                             <input type="checkbox" value="1">1
417                             <input type="checkbox" value="2">2
418                             <input type="checkbox" value="3">3
419                             <input type="checkbox" value="4">4
420                             <input type="checkbox" value="5">5
421                             <input type="checkbox" value="6">6
422                             <input type="checkbox" value="7">7
423                             <input type="checkbox" value="8">8
424                             <input type="checkbox" value="9">9
425                             <input type="checkbox" value="10">10
426                             <input type="checkbox" value="11">11
427                             <input type="checkbox" value="12">12
428                         </div>
429                     </div>
430                     <div title="">
431                         <div class="line">
432                             <input type="radio" checked="checked" name="week" onclick="everyTime(this)">
433                             周 允许的通配符[, - * / L #]
434                         </div>
435                         <div class="line">
436                             <input type="radio" name="week" onclick="unAppoint(this)">
437                             不指定
438                         </div>
439                         <div class="line">
440                             <input type="radio" name="week" onclick="startOn(this)">
441                             周期 从星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
442                                          id="weekStart_0" value="1">
443                             -
444                             <input class="numberspinner" style="width: 60px;" data-options="min:2,max:7" value="2"
445                                    id="weekEnd_0">
446                         </div>
447                         <div class="line">
448                             <input type="radio" name="week" onclick="weekOfDay(this)">
449                             第<input class="numberspinner" style="width: 60px;" data-options="min:1,max:4" value="1"
450                                     id="weekStart_1">
451                             周 的星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
452                                         id="weekEnd_1" value="1">
453                         </div>
454                         <div class="line">
455                             <input type="radio" name="week" onclick="lastWeek(this)">
456                             本月最后一个星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
457                                            id="weekStart_2" value="1">
458                         </div>
459                         <div class="line">
460                             <input type="radio" name="week" id="week_appoint">
461                             指定在周几执行
462                         </div>
463                         <div class="imp weekList">
464                             <input type="checkbox" value="1">1
465                             <input type="checkbox" value="2">2
466                             <input type="checkbox" value="3">3
467                             <input type="checkbox" value="4">4
468                             <input type="checkbox" value="5">5
469                             <input type="checkbox" value="6">6
470                             <input type="checkbox" value="7">7
471                         </div>
472                     </div>
473                     <div title="">
474                         <div class="line">
475                             <input type="radio" checked="checked" name="year" onclick="unAppoint(this)">
476                             不指定 允许的通配符[, - * /] 非必填
477                         </div>
478                         <div class="line">
479                             <input type="radio" name="year" onclick="everyTime(this)">
480                             每年
481                         </div>
482                         <div class="line">
483                             <input type="radio" name="year" onclick="cycle(this)">周期 从
484                             <input class="numberspinner" style="width: 90px;" data-options="min:2013,max:3000"
485                                    id="yearStart_0" value="2013">
486                             -
487                             <input class="numberspinner" style="width: 90px;" data-options="min:2014,max:3000"
488                                    id="yearEnd_0" value="2014">
489                         </div>
490                     </div>
491                 </div>
492             </div>
493             <div data-options="region:'south',border:false" style="height: 230px">
494                 <fieldset style="border-radius: 3px; height: 116px;">
495                     <legend>表达式</legend>
496                     <table style="height: 100px;">
497                         <tbody>
498                             <tr>
499                                 <td></td>
500                                 <td align="center">
501 502                                 </td>
503                                 <td align="center">
504                                     分钟
505                                 </td>
506                                 <td align="center">
507                                     小时
508                                 </td>
509                                 <td align="center">
510 511                                 </td>
512                                 <td align="center">
513                                     月<br />
514                                 </td>
515                                 <td align="center">
516                                     星期
517                                 </td>
518                                 <td align="center">
519 520                                 </td>
521                             </tr>
522                             <tr>
523                                 <td>
524                                     表达式字段:
525                                 </td>
526                                 <td>
527                                     <input type="text" name="v_second" class="col" value="*" readonly="readonly" />
528                                 </td>
529                                 <td>
530                                     <input type="text" name="v_min" class="col" value="*" readonly="readonly" />
531                                 </td>
532                                 <td>
533                                     <input type="text" name="v_hour" class="col" value="*" readonly="readonly" />
534                                 </td>
535                                 <td>
536                                     <input type="text" name="v_day" class="col" value="*" readonly="readonly" />
537                                 </td>
538                                 <td>
539                                     <input type="text" name="v_mouth" class="col" value="*" readonly="readonly" />
540                                 </td>
541                                 <td>
542                                     <input type="text" name="v_week" class="col" value="?" readonly="readonly" />
543                                 </td>
544                                 <td>
545                                     <input type="text" name="v_year" class="col" readonly="readonly" />
546                                 </td>
547                             </tr>
548                             <tr>
549                                 <td>Cron 表达式:</td>
550                                 <td colspan="6">
551                                     <input type="text" name="cron" style="width: 100%;" value="* * * * * ?" id="cron" />
552                                 </td>
553                                 <td><input type="button" value="反解析到UI " id="bt" onclick="btnFan()" /></td>
554                             </tr>
555                         </tbody>
556                     </table>
557                 </fieldset>
558                 <div style="text-align: center; margin-top: 5px;">
559                     <script type="text/javascript">
560                         /*killIe*/
561                         $.parser.parse($("body"));
562                         var cpro_id = "u1331261";
563                         var id = getQueryString("id");
564                         function btnFan() {
565                             //获取参数中表达式的值
566                             var txt = $("#cron").val();
567                             if (txt) {
568                                 var regs = txt.split(' ');
569                                 $("input[name=v_second]").val(regs[0]);
570                                 $("input[name=v_min]").val(regs[1]);
571                                 $("input[name=v_hour]").val(regs[2]);
572                                 $("input[name=v_day]").val(regs[3]);
573                                 $("input[name=v_mouth]").val(regs[4]);
574                                 $("input[name=v_week]").val(regs[5]);
575 
576                                 initObj(regs[0], "second");
577                                 initObj(regs[1], "min");
578                                 initObj(regs[2], "hour");
579                                 initDay(regs[3]);
580                                 initMonth(regs[4]);
581                                 initWeek(regs[5]);
582 
583                                 if (regs.length > 6) {
584                                     $("input[name=v_year]").val(regs[6]);
585                                     initYear(regs[6]);
586                                 }
587                             }
588                             // 使用layer把子窗口的值传给父窗口
589                             var index = parent.layer.getFrameIndex(window.name);  // 得到索引
590                             parent.$('#Cron').val(txt);
591                             parent.layer.close(index);
592                         }
593 
594 
595                         function initObj(strVal, strid) {
596                             var ary = null;
597                             var objRadio = $("input[name='" + strid + "'");
598                             if (strVal == "*") {
599                                 objRadio.eq(0).attr("checked", "checked");
600                             } else if (strVal.split('-').length > 1) {
601                                 ary = strVal.split('-');
602                                 objRadio.eq(1).attr("checked", "checked");
603                                 $("#" + strid + "Start_0").numberspinner('setValue', ary[0]);
604                                 $("#" + strid + "End_0").numberspinner('setValue', ary[1]);
605                             } else if (strVal.split('/').length > 1) {
606                                 ary = strVal.split('/');
607                                 objRadio.eq(2).attr("checked", "checked");
608                                 $("#" + strid + "Start_1").numberspinner('setValue', ary[0]);
609                                 $("#" + strid + "End_1").numberspinner('setValue', ary[1]);
610                             } else {
611                                 objRadio.eq(3).attr("checked", "checked");
612                                 if (strVal != "?") {
613                                     ary = strVal.split(",");
614                                     for (var i = 0; i < ary.length; i++) {
615                                         $("." + strid + "List input[value='" + ary[i] + "']").attr("checked", "checked");
616                                     }
617                                 }
618                             }
619                         }
620 
621                         function initDay(strVal) {
622                             var ary = null;
623                             var objRadio = $("input[name='day'");
624                             if (strVal == "*") {
625                                 objRadio.eq(0).attr("checked", "checked");
626                             } else if (strVal == "?") {
627                                 objRadio.eq(1).attr("checked", "checked");
628                             } else if (strVal.split('-').length > 1) {
629                                 ary = strVal.split('-');
630                                 objRadio.eq(2).attr("checked", "checked");
631                                 $("#dayStart_0").numberspinner('setValue', ary[0]);
632                                 $("#dayEnd_0").numberspinner('setValue', ary[1]);
633                             } else if (strVal.split('/').length > 1) {
634                                 ary = strVal.split('/');
635                                 objRadio.eq(3).attr("checked", "checked");
636                                 $("#dayStart_1").numberspinner('setValue', ary[0]);
637                                 $("#dayEnd_1").numberspinner('setValue', ary[1]);
638                             } else if (strVal.split('W').length > 1) {
639                                 ary = strVal.split('W');
640                                 objRadio.eq(4).attr("checked", "checked");
641                                 $("#dayStart_2").numberspinner('setValue', ary[0]);
642                             } else if (strVal == "L") {
643                                 objRadio.eq(5).attr("checked", "checked");
644                             } else {
645                                 objRadio.eq(6).attr("checked", "checked");
646                                 ary = strVal.split(",");
647                                 for (var i = 0; i < ary.length; i++) {
648                                     $(".dayList input[value='" + ary[i] + "']").attr("checked", "checked");
649                                 }
650                             }
651                         }
652 
653                         function initMonth(strVal) {
654                             var ary = null;
655                             var objRadio = $("input[name='mouth'");
656                             if (strVal == "*") {
657                                 objRadio.eq(0).attr("checked", "checked");
658                             } else if (strVal == "?") {
659                                 objRadio.eq(1).attr("checked", "checked");
660                             } else if (strVal.split('-').length > 1) {
661                                 ary = strVal.split('-');
662                                 objRadio.eq(2).attr("checked", "checked");
663                                 $("#mouthStart_0").numberspinner('setValue', ary[0]);
664                                 $("#mouthEnd_0").numberspinner('setValue', ary[1]);
665                             } else if (strVal.split('/').length > 1) {
666                                 ary = strVal.split('/');
667                                 objRadio.eq(3).attr("checked", "checked");
668                                 $("#mouthStart_1").numberspinner('setValue', ary[0]);
669                                 $("#mouthEnd_1").numberspinner('setValue', ary[1]);
670 
671                             } else {
672                                 objRadio.eq(4).attr("checked", "checked");
673 
674                                 ary = strVal.split(",");
675                                 for (var i = 0; i < ary.length; i++) {
676                                     $(".mouthList input[value='" + ary[i] + "']").attr("checked", "checked");
677                                 }
678                             }
679                         }
680 
681                         function initWeek(strVal) {
682                             var ary = null;
683                             var objRadio = $("input[name='week'");
684                             if (strVal == "*") {
685                                 objRadio.eq(0).attr("checked", "checked");
686                             } else if (strVal == "?") {
687                                 objRadio.eq(1).attr("checked", "checked");
688                             } else if (strVal.split('/').length > 1) {
689                                 ary = strVal.split('/');
690                                 objRadio.eq(2).attr("checked", "checked");
691                                 $("#weekStart_0").numberspinner('setValue', ary[0]);
692                                 $("#weekEnd_0").numberspinner('setValue', ary[1]);
693                             } else if (strVal.split('-').length > 1) {
694                                 ary = strVal.split('-');
695                                 objRadio.eq(3).attr("checked", "checked");
696                                 $("#weekStart_1").numberspinner('setValue', ary[0]);
697                                 $("#weekEnd_1").numberspinner('setValue', ary[1]);
698                             } else if (strVal.split('L').length > 1) {
699                                 ary = strVal.split('L');
700                                 objRadio.eq(4).attr("checked", "checked");
701                                 $("#weekStart_2").numberspinner('setValue', ary[0]);
702                             } else {
703                                 objRadio.eq(5).attr("checked", "checked");
704                                 ary = strVal.split(",");
705                                 for (var i = 0; i < ary.length; i++) {
706                                     $(".weekList input[value='" + ary[i] + "']").attr("checked", "checked");
707                                 }
708                             }
709                         }
710 
711                         function initYear(strVal) {
712                             var ary = null;
713                             var objRadio = $("input[name='year'");
714                             if (strVal == "*") {
715                                 objRadio.eq(1).attr("checked", "checked");
716                             } else if (strVal.split('-').length > 1) {
717                                 ary = strVal.split('-');
718                                 objRadio.eq(2).attr("checked", "checked");
719                                 $("#yearStart_0").numberspinner('setValue', ary[0]);
720                                 $("#yearEnd_0").numberspinner('setValue', ary[1]);
721                             }
722                         }
723 
724                     </script>
725 
726                     <div>
727                     </div>
728                 </div>
729             </div>
730             <div>
731             </div>
732         </div>
733     </center>
734 </body>
735 </html>
View Code

  (7)、_Layout视图是我们的模板页代码如下   注:路径看CronUse页面

 1 <!DOCTYPE html>
 2 
 3 <html>
 4 
 5 <head>
 6     <meta charset="utf-8">
 7     <title>后台管理模板</title>
 8     <meta name="renderer" content="webkit">
 9     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
10     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
11     <meta name="apple-mobile-web-app-status-bar-style" content="black">
12     <meta name="apple-mobile-web-app-capable" content="yes">
13     <meta name="format-detection" content="telephone=no">
14 </head>
15 
16 <body>
17 @RenderBody()
18 </body>
19 
20 </html>
View Code

  (8)、视图搭建好之后、我们在写后端实现quartz控制器  代码如下

 1  /// <summary>
 2         /// 设置Cron时间开启方法
 3         /// </summary>
 4         /// <param name="cron"></param>
 5         /// <returns></returns>
 6         public JsonResult CronQuartzs(string cron)
 7         {
 8             OperateStatus statu = new OperateStatus();
 9             try
10             {
11                 LogTool.DetailLogRecord("CronLog", LogTool.FolderCreationType.None, "创建调度器成功", false);
12                 _sched.Start();
13                 IJobDetail job = JobBuilder.Create<CronJob>()
14                         .WithIdentity("Cron作业名称", "Cron作业分组")
15                         .Build();
16                 // 触发作业
17                 ITrigger trigger = TriggerBuilder.Create()
18 
19                 #region 使用cron 规则
20 
21                     .WithIdentity("Cron触发器名称", "Cron触发器分组")
22                     .WithCronSchedule(cron) // 你设置的执行时间
23                     .StartAt(DateTime.UtcNow)
24                     .WithPriority(1)
25                     .Build();
26                 #endregion
27 
28                 // 将作业和触发器添加到调度器
29                 _sched.ScheduleJob(job, trigger);
30                 statu.Message = "开启成功";
31                 statu.ResultSign = ResultSign.Successful;
32                 //return Json(statu);
33             }
34             catch (Exception ex)
35             {
36                 statu.Message = ex.Message;
37                 statu.ResultSign = ResultSign.Error;
38 
39             }
40             return Json(statu);
41         }
42 
43         /// <summary>
44         /// 关闭任务
45         /// </summary>
46         public JsonResult CloseTask()
47         {
48             OperateStatus statu = new OperateStatus();
49             try
50             {
51                 _sched.Shutdown();
52                 statu.Message = "关闭成功";
53                 statu.ResultSign = ResultSign.Successful;
54             }
55             catch (Exception ex)
56             {
57                 statu.Message = ex.Message;
58                 statu.ResultSign = ResultSign.Error;
59             }
60             return Json(statu);
61         }
View Code

  (9)、后端的实现是和前一篇博客相差不大的,但有2点不同是我们重新建立了一个作业类(CronJob)   CronJob存放路径在Job文件夹下和OperateStatus消息提示类 OperateStatus存放路径Tool->Message文件夹下  代码如下

  CronJob类

 1  public class CronJob:IJob
 2     {
 3 
 4         /// <summary>
 5         /// 作业默认实现接口
 6         /// </summary>
 7         /// <param name="context"></param>
 8         public void Execute(IJobExecutionContext context)
 9         {
10             LogTool.DetailLogRecord("CronLog", LogTool.FolderCreationType.None, "我的Cron表达式任务", false);
11         }
12     }
View Code

  OperateStatus 类

 1  /// <summary>
 2     ///  调用服务或业务逻辑的返回标识枚举,使用DataContract特性,表示可序列化
 3     /// </summary>
 4     public enum ResultSign
 5     {
 6         /// <summary>
 7         ///     操作成功
 8         /// </summary>
 9         Successful = 0,
10 
11         /// <summary>
12         ///     警告
13         /// </summary>
14         Warning = 1,
15 
16         /// <summary>
17         ///     操作引发错误
18         /// </summary>
19         Error = 2
20     }
21 
22     /// <summary>
23     ///     调用调用服务或业务逻辑的操作状态,使用DataContract特性,表示可序列化
24     /// </summary>
25     public  class OperateStatus
26     {
27         #region 构造函数
28 
29         /// <summary>
30         ///     构造函数:默认为失败
31         /// </summary>
32         public OperateStatus()
33         {
34             ResultSign = ResultSign.Error;
35             Message = "失败";
36         }
37 
38         public OperateStatus(OperateStatus status)
39         {
40             ResultSign = status.ResultSign;
41             Message = status.Message;
42             FormatParams = status.FormatParams;
43         }
44 
45         #endregion
46 
47         #region 属性
48 
49         /// <summary>
50         ///     返回标记
51         /// </summary>
52         public ResultSign ResultSign { get; set; }
53 
54         /// <summary>
55         ///     消息字符串(有多语言后将删除该属性)
56         /// </summary>
57         public string Message { get; set; }
58 
59         /// <summary>
60         ///     消息的参数
61         /// </summary>
62         public List<string> FormatParams { get; set; }
63         #endregion
64     }
65 
66     /// <summary>
67     /// 返回结果带实体信息
68     /// </summary>
69     /// <typeparam name="T">实体信息</typeparam>
70     public class OperateStatus<T> : OperateStatus
71     {
72         public T Data { get; set; }
73     }
View Code

  (10)、恩、写了这么多终于结束了,下面我们就来看看我们的成果吧

  运行项目我们看到如下界面

  

  点击quartz.net 入门->Cron表达式的运用 会看到如下图界面

  

  根据提示我们点击文本框弹出如下界面

  

  点击反解析到UI,我们设置的Cron表达式就出现在我们文本框里啦  如图

  

  到这里我们就把cron表达式设置成功 ,然后点击开启任务,我们打开本地磁盘E 找到QuartzLog\CronLog 我们会看到有一个日志文件并打开 日志如下

  

  可以看到。日志里是我们设置的每分钟的第5秒执行一次的结果

三、源码及说明

  1、有事请留言,要源码请加qq群:460362190

  2、前端框架的加入,导致这篇博客写的有点繁琐,望大家理解,但是这是我以后编写quartz所必经的阶段

  3、下一篇博客我将引入数据库,敬请期待

  4、如果喜欢我的文章请点关注和推荐O(∩_∩)O~~  无比感谢,有问题留言哦 

posted @ 2017-05-25 11:03  陈逸子风  阅读(3051)  评论(10编辑  收藏  举报