黃昌可



摘要:文章探討了Quartz.NET任務調度系統在醫院信息化中的應用。通過對任務調度系統的介紹和Quartz.NET的特點分析,文章提出了基于Quartz.NET的任務調度系統在醫院信息化中的應用方案,主要包括任務調度系統的設計和實現、任務執行監控和報警機制的建立等方面。該方案在實際應用中,有效提高了醫院信息化系統的運行效率和管理水平,減輕人工負擔,提高醫院服務水平,具有較高的實用價值和推廣意義。
關鍵詞:Quartz.NET;任務調度;醫院信息化
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2023)13-0063-04
開放科學(資源服務)標識碼(OSID)
0 引言
隨著醫療技術的不斷更新和人口老齡化的加劇,醫院信息化已成為醫院管理和服務水平提升的必要手段。醫院信息化需要高效穩定的系統支持,這就需要任務調度系統來定時執行重復性任務、監控任務執行情況、自動報警等。
任務調度系統是實現醫院信息化系統高效穩定運行的關鍵技術之一。它可以通過減輕人工負擔和提高工作效率,幫助醫院信息化系統實現自動化運維和提高管理水平。
1 Quartz.NET任務調度系統介紹
Quartz.NET任務調度系統是一款開源的任務調度框架,具有高可靠性、高精度、高擴展性等特點。它支持復雜的任務調度邏輯和大規模分布式任務調度,基于C#編寫,具有良好的跨平臺性和可擴展性。Quartz.NET采用簡單易用、高度靈活的API,可以輕松創建和管理大量的定時任務。Quartz.NET可以靈活地配置任務的執行周期,支持多種任務觸發器,同時還提供了任務執行狀態監控、異常報警、任務重試等功能。在醫院信息化系統中,Quartz.NET的應用方案可以包括任務調度器、任務觸發器和任務執行器等組件的設計和實現,以及任務執行監控和報警機制的建立。
通過基于Quartz.NET的任務調度系統,醫院信息化系統可以實現自動化運維,自動化執行重復性任務,提高工作效率,減輕人工負擔。例如,醫院可以通過任務調度系統來實現定時備份數據庫、定時清理日志等任務的自動化執行。此外,任務調度系統還可以對醫院信息化系統的運行情況進行實時監控和管理,及時發現問題并進行處理,提高系統管理水平。在未來的發展中,可以進一步優化任務調度系統的設計和實現,加強任務執行監控和報警機制的建立,提高醫院信息化系統的智能化程度。例如,可以通過引入機器學習和人工智能等技術,來自動優化任務調度策略,提高任務執行效率和質量。
2 基于Quartz.NET的任務調度系統在醫院信息化中的應用方案
2.1 Quartz.NET框架基礎概念
Quartz框架是一個開源的作業調度框架,具有強大靈活的調度規則配置、作業狀態監控和故障恢復等功能。使用Quartz框架可以為企業信息管理系統的定時調度任務進行簡單快捷靈活的配置調度機制,實現企業常規和非常規的復雜調度功能。開發人員可以根據業務的具體需求設置調度的時間點或時間間隔來進行具體的任務調度。Quartz框架能夠通過與Spring很好地集成來提供強大的、可靈活配置的調度功能并應用到J2EE Web應用的開發中,它在企業應用調度開發中占據極其重要的地位,是目前比較受歡迎的且很易用的任務調度框架。
Quartz任務調度框架最重要的核心三件套為:任務調度器(Scheduler) 、觸發器(Trigger) 和任務(Job) [1]。其中調度任務的核心管理者是任務調度器(Scheduler) ,調度任務的操作者是觸發器(Trigger) ,調度任務(Job) 是系統中相應的功能模塊。開發者可以設定作業觸發器監聽規則,針對特定的業務計劃需求來進行作業計劃,它們的關系如圖1所示。
調度器(Scheduler) 是Quartz框架最主要的核心模塊,它對Quartz的應用運行的環境起到管理的作用,Quartz框架主要的API也是調度器(Scheduler) 。對于利用Quartz開發的工程師來說,Scheduler是Quartz調度框架與工程師人員發生構建的中間橋梁,大多數的交互行為都是以Scheduler為基礎進行的。Scheduler調度器通過協調框架內的JobDetail任務模塊和Trigger觸發器模塊來執行具體的任務調度事件,而不是獨立地完成一個調度任務。JobDetial和Trigger只需要注冊登記到Scheduler,調度作業就會伴隨著應用的啟動自動執行。一個完整的Quartz調度任務,必須包括三個核心組件要素:觸發器(Trigger) 、調度器(Scheduler) 和任務(Job) 。觸發器就是一個定時任務的驅動器,負責對配置的作業進行定時執行。一個調度任務可以配置多個觸發器,但一個觸發器只能驅動一個作業任務。Quartz作為一款優秀的開源調度框架,它能夠與Spring集成整合實現強大的調度作業,而且對運行環境也沒有特別的依賴,此外Quartz還提供了強大的集群及分布式能力,其強大的調度機制支持更多個性化的調度方法[2]。
Quartz.NET是一個全功能開放的開源作業調度系統。完全由C#編寫的.NET類庫,是一個非常流行的開源Java工作調度框架QuartzAPI的移植,可用于winform和asp.net應用中[3]。它擁有強大的靈活性,但同時也保持了簡潔性。能夠用它來創建一個簡單的或復雜的調度作業。它具有大量特性,比如:數據庫支持、集群、插件、支持Cron表達式等。
2.2 模塊接口介紹
在Quartz.NET中,有以下幾個重要的類:
1) Schdeuler類:這個類的方法是將調度任務數據寫入系統內存,使Quartz.NET在設定的時間觸發作業執行。
2) Job接口:用戶自定義的作業在該模塊實現。用戶只需將自定義的需求在Job接口的execute方法中實現,任務被觸發時,execute方法便會被調用執行,即用戶自定義的邏輯被執行。
3) JobDetail類:該類包含了任務的各種屬性,如任務名稱、任務分組名、任務類名等。而任務類名則是實現Job接口的任務類,它包含了具體執行任務的邏輯。在JobDetail類中,還可以添加一些JobDataMap數據,用于傳遞任務執行所需的參數。
4) Trigger類:該類是Quartz.NET的核心類,用于觸發作業。它支持兩種觸發類型的設置:Cron表達式型和Interval型。通過設置開始時間、結束時間、執行次數等,可以實現對任務的詳細控制。Cron表達式型可以設置更加豐富和復雜的時間觸發規則,而Interval型則可以設置固定的時間間隔來觸發任務。通過Trigger類,可以更加靈活地配置Quartz框架中的任務,實現更加精細化的任務調度。
①Cron表達式方式
Cron表達式是Quartz.NET特有的字符串,當Quartz.NET讀取到該表達式時,會自動解析出該表達式的含義,從而實現用戶期望的調度計劃,表達式分為七段,分別表示秒、分、時、日、月、周、年。示例見表1。
②Inteval方式
Inteval方式與Cron表達式不同,它以精確的間隔來觸發任務,即每次觸發的間隔是恒定不變的。Quartz.NET中間隔的單位一般是秒、分、時,最大不會大于小時[4]。
在Quartz.NET的架構中,自定義任務的實現需要實現Job接口,并將業務邏輯代碼寫入execute方法中。任務的具體參數由JobDetail類定義,包括任務名稱、任務分組名、任務類名等。任務的調度計劃由Trigger類定義,如指定任務的觸發時間點或時間間隔等。注冊任務到系統進程需要調用Scheduler類的Schedule.scheduleJob(JobDetail, Trigger)方法。當調度任務被觸發時,任務引擎通過Scheduler類解析出JobDetail類中包含的作業參數,并通過JobDataMap數據傳遞任務所需的參數給新的任務實例,用于執行任務的execute方法。
Quartz框架提供了JobDetail類和Trigger類來幫助實現任務的配置和調度計劃,從而實現任務的自動化調度和執行。這些特性可以提高系統的可靠性和效率。
2.3 基礎使用介紹
Quartz.NET框架的核心模塊是調度器scheduler、job類的實例JobDetail以及trigger類的實例SimpleTrigger和CronTrigger。在使用Quartz.NET框架時,先用schedulerFactory實例化一個調度器scheduler。在程序代碼中可以直接實例化這個工廠類并且使用工廠的實例,其示例代碼如下:
ISchedulerFactory schedulerFactory=new ISchedulerFactory();
IScheduler scheduler = schedulerFactory.GetScheduler();
scheduler.Start();
JobDetail對象用于綁定Job實例。它包含了Job的各種屬性,其示例代碼如下:
public class HttpResultfulJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
#TaskOptions taskOptions = context.GetTaskOptions();獲取job的參數
Console.Out.WriteLineAsync("Test HttpResultfulJob Job!");
}}
然后可以在Main方法中綁定該Job:
IJobDetail job = JobBuilder.Create
.WithIdentity(taskOptions.TaskName, taskOptions.GroupName).Build();
Trigger對象被用來觸發自定義的任務計劃。希望將任務加入進程,要實例化一個Trigger并且“調整”它的屬性以滿足想要的進度安排。Quartz.NET框架里面有許多不同類型的Trigger,但最常用的Trigge類是SimpleTrigger和CronTrigger SimpleTrigger。立即運行,按設定的Cron表達式執行代碼如下:
ITITrigger trigger = TriggerBuilder.Create()
.WithIdentity(taskOptions.TaskName, taskOptions.GroupName)
.StartNow()
.WithDescription(taskOptions.Describe)
.WithCronSchedule(taskOptions.Interval)
.Build();
最后將任務注冊到scheduler中即可:
scheduler.ScheduleJob(job, trigger);
2.4 任務調度實現
首先,需要將Quartz.net添加到項目中??梢酝ㄟ^NuGet包管理器或通過手動下載并添加引用的方式添加Quartz.net,接著創建一個Job類,在這個類中實現實際的任務。Job類必須實現IJob接口,并實現Execute方法。Execute方法是任務的實際代碼。需要注意的是,Job類必須是一個無狀態的類,因為Quartz.net會在需要執行Job時創建Job的實例,因此如果Job類包含任何狀態,可能會導致意外的行為。完成Job部分后,再創建Trigger,指定任務的執行時間。Trigger必須指定一個唯一的名稱和分組,以便在Scheduler中進行管理。然后就可以創建Scheduler,也就是任務調度的核心組件,將Job和Trigger添加到Scheduler中。Scheduler將根據Trigger指定的時間表執行Job??梢允褂肧tdSchedulerFactory來創建Scheduler實例。
最后可以通過調用Scheduler的Start方法來啟動Scheduler。此時,Scheduler就會開始執行Job,并按照Trigger指定的時間表觸發任務了。
2.5 可視化
Quartz.NET提供了一些調度器監聽器和日志記錄器,方便對任務的執行情況進行監控和調試。
為了方便任務的管理,可以使用可視化設計對所有任務進行界面化的管理。將每個定時任務的各項屬性,如作業的名稱、作業所屬分組、Cron表達式、作業描述、執行情況、執行api地址等以一條完整記錄形式存入數據庫中。這樣,一個個任務就轉化成關系表中的一條條記錄,定時任務的可視化管理也就轉變為常見的關系表的可視化管理[5]。
使用MVC架構,將頁面操作,與調度任務的控制,包裝到控制器(controller) 中,在視圖(View) 中調用相關方法,展示及持久化調度任務數據,部分展示如圖2、圖3。
2.6 解決應用程序池回收
當應用程序池長時間運行,IIS 會將其自動回收,以保證服務器的穩定性和性能。但是這種自動回收有時會影響應用程序的正常運行,因此需要進行相應的處理[6]。這里采用注冊系統服務,定時調用處理。
在Quart.NET的Web項目中創建一個HealthController類,并增加一個KeepAlive方法,方法的實現,直接返回當前時間即可,然后在應用程序的項目中調用這個地址,并將定時調用的程序注冊為系統服務。
應用注冊為系統服務.bat:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe
D:\...\bin\Debug\Quartz.NET.WindowsService.exe
Net Start Quartz.Net? sc config Quartz.Net start= auto
3 實際應用效果分析
除了提高醫院信息化系統的運行效率和管理水平之外,Quartz.NET的任務調度系統還可以帶來以下實際應用效果:
1) 降低系統維護成本:使用任務調度系統可以減少人工干預,降低系統維護成本。自動化執行的任務可以避免人為錯誤和疏漏,提高系統穩定性和可靠性。例如,定時備份數據庫、定時清理日志等任務都可以通過任務調度系統來實現自動化執行,從而降低系統維護成本。
2) 提高數據安全性:任務調度系統可以實現數據備份、數據清理等任務,保護醫院信息化系統中的重要數據,提高數據安全性。例如,定時備份數據庫可以保護數據不會因為系統故障或人為錯誤而丟失,提高數據安全性。任務調度系統還可以監控任務的執行情況,及時發現異常情況并進行處理,進一步提高數據安全性。
3) 支持多樣化的任務調度:Quartz.NET的任務調度系統支持多種任務調度方式,如簡單調度、Cron調度等,可以滿足不同的任務調度需求。例如,簡單調度可以設置指定時間間隔重復執行任務,Cron調度可以根據復雜的時間表達式來執行任務,滿足不同的任務調度需求。同時,任務調度系統還支持任務依賴關系設置,可以確保任務按照正確的順序執行,避免任務之間的沖突和錯誤。
4) 增強系統可擴展性:任務調度系統可以通過自定義Job和Trigger來實現自定義任務的調度,增強系統的可擴展性和靈活性。例如,自定義Job和Trigger可以滿足醫院信息化系統中不同業務部門的需求,增強系統可擴展性。此外,任務調度系統還支持集群部署,可以通過增加節點來擴展系統的處理能力。這意味著,當系統負載增加時,可以通過增加節點來提高系統的處理能力,增強系統的可擴展性。
5) 提高任務執行效率:任務調度系統可以實現任務并發執行,提高任務執行效率。例如,在醫院信息化系統中,有些任務需要同時執行多個實例,任務調度系統可以根據系統配置的并發數來實現多個實例的同時執行,提高任務執行效率。
因此,Quartz.NET的任務調度系統在醫院信息化系統中具有重要的應用價值,可以為醫院信息化系統的運行和管理帶來更多實際效果。任務調度系統的自動化執行和監控功能可以提高運行效率和管理水平,同時降低系統維護成本,提高數據安全性,滿足不同的任務調度需求,增強系統可擴展性,提高任務執行效率。
4 結束語
Quartz.NET作業調度框架的API在多個方面都表現出了極佳的性能與易用性。在醫院信息化中,該框架具有較高的實用價值和推廣意義??梢暬淖鳂I調度管理不僅可以通過頁面直觀地展示各個任務的運行狀態,而且上次任務失敗原因也會被捕獲并在頁面上展示。這方便了開發者或運維人員及時發現任務調度中存在的問題,以便快速解決問題。
參考文獻:
[1] 王添男,李新慶,徐曉慶,等.基于氣象大數據云平臺的自動化告警應用研究[J].寧夏工程技術,2021,20(4):352-356.
[2] 劉光明,朱肖穎.Web應用與Quartz的整合研究[J].企業科技與發展,2018(3):114-116.
[3] 李林,楊才,關曉軍,等.自動氣象站監控平臺數據傳輸故障短信通知系統的開發與應用[J].青海科技,2017,24(4):58-65.
[4] 沈宇杰.基于Quartz的可自定義作業調度系統的設計與實現[J].通化師范學院學報,2019,40(4):78-81.
[5] 葉剛.基于Quartz的可視化定時任務管理方案[J].電子技術與軟件工程,2018(17):139-140.
[6] 田雅.基于.NET應用系統性能優化的研究與實踐[J].計算機光盤軟件與應用,2013(5):173-174.
【通聯編輯:謝媛媛】