Quartz.net 定時任務之Cron表達式

来源:http://www.cnblogs.com/cyzf/archive/2017/05/25/6899914.html
-Advertisement-
Play Games

一、cron表達式簡單介紹和下載 1、在上一篇博客“Quartz.net 定時任務之簡單任務”中,我簡單介紹了quartz的使用,而這篇博客我將介紹cron的具體使用(不足之處望大神斧正) 1、cron是為了方便編寫定時執行作業時間擴展出來的插件,這個有很多版本(網頁版,窗體版等),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   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Parallel類是對線程的一個抽象。該類位於System.Threading.Tasks名稱空間中,提供了數據和任務並行性。 Paraller類定義了數據並行地For和ForEach的靜態方法,以及任務並行的Invoke的靜態方法。Parallel.For()和Parallel.ForEach() ...
  • 類似相關問題有以下: WCF- restful介面 POST方式調用報錯(遠程伺服器返回錯誤: 400 錯誤的請求) WCF Rest:不使用UriTemplate使用post方式傳參解決HTTP400問題以及參數映射問題 等等! 具體原因參照:原創:轉載請標明出處:http://www.cnblo ...
  • 一、新建一個html頁面,如註冊頁面"Register.htm" 二、新建一js文件,如:reg.js 三、處理ajax請求 方法一:手動拼接json字元串 新建一般處理程式,如:Register.ashx 方法二:使用Json.NET工具來將C#對象轉換json輸出 1、新建信息類“Msg.cs” ...
  • 前言 很多時候其實我們並不需要asp.net core自帶的那麼複雜的用戶系統,基於角色,各種概念,還得用EF Core,而且在web應用中都是把信息存儲到cookie中進行通訊(我不喜歡放cookie中,因為有次我在mac系統中的safari瀏覽器運行web應用時,碰到跨域cookie設不上,非要 ...
  • 回到目錄 TransactionScope是.net環境下的事務,可以提升為分散式事務,這些知識早在很久前就已經說過了,今天不再說它,今天主要談談Savechanges()這個方法在TransactionScope塊里的作用,我們知識TransactionScope只有顯示的提交動作而沒有回滾,那麼 ...
  • 首先並不是每個事件的e參數都有上述兩個屬性。 e.Cancel:獲取或設置指示是否應取消事件的值;e.Handled:獲取或設置一個值,該值指示是否處理過此事件。 下麵說說比較常見的場景: 1)e.cancel: ①視窗關閉,比如用戶點擊視窗右上角想關閉,但代碼里彈出確認框讓用戶確認是否真的想退出, ...
  • 1、Messager交互結構和消息類型 銜接上篇,Messeger是信使的意思,顧名思義,他的目是用於View和ViewModel 以及 ViewModel和ViewModel 之間的消息通知和接收。 Messenger類用於應用程式的通信,接受者只能接受註冊的消息類型,另外目標類型可以被指定,用S ...
  • 某天 , 在review項目中代碼的時候, 發現有哥們直接通過 Database.ExecuteSqlCommand("select * from order_info where company like '%abc%' ")的方式與資料庫查詢, 私下問其是否知道這個方法還有一個帶有params ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...