• 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="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              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=" 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=" 60px;" data-options="min:1,max:58" value="1"
     49                                    id="secondStart_0">
     50                             -
     51                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:0,max:59" value="0"
     59                                    id="secondStart_1">
     60                             秒开始,每
     61                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:1,max:58" value="1"
    150                                    id="minStart_0">
    151                             -
    152                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:0,max:59" value="0"
    160                                    id="minStart_1">
    161                             分钟开始,每
    162                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:0,max:23" value="0"
    251                                    id="hourStart_0">
    252                             -
    253                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:0,max:23" value="0"
    261                                    id="hourStart_1">
    262                             小时开始,每
    263                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:1,max:31" value="1"
    315                                    id="dayStart_0">
    316                             -
    317                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:1,max:31" value="1"
    325                                    id="dayStart_1">
    326                             日开始,每
    327                             <input class="numberspinner" style=" 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=" 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=" 60px;" data-options="min:1,max:12" value="1"
    395                                    id="mouthStart_0">
    396                             -
    397                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:1,max:12" value="1"
    405                                    id="mouthStart_1">
    406                             日开始,每
    407                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:1,max:7"
    442                                          id="weekStart_0" value="1">
    443                             -
    444                             <input class="numberspinner" style=" 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=" 60px;" data-options="min:1,max:4" value="1"
    450                                     id="weekStart_1">
    451                             周 的星期<input class="numberspinner" style=" 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=" 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=" 90px;" data-options="min:2013,max:3000"
    485                                    id="yearStart_0" value="2013">
    486                             -
    487                             <input class="numberspinner" style=" 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=" 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 找到QuartzLogCronLog 我们会看到有一个日志文件并打开 日志如下

      

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

    三、源码及说明

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

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

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

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

  • 相关阅读:
    JAVA :: MVC
    顺序栈创建
    editplus 配置工具集
    链表之创建
    13.1.22:线性表之单链表
    Web 多线程作业
    给 Mac OS X Lion 刻一张安装光盘
    kubernetes组件之api 安装
    kubeadm 之k8s 多master 部署
    kubernetes集群之部署kubescheduler组件
  • 原文地址:https://www.cnblogs.com/cyzf/p/6899914.html
Copyright © 2020-2023  润新知