国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Quartz的可視化定時任務(wù)管理方案

2018-02-26 12:23葉剛
電子技術(shù)與軟件工程 2018年17期
關(guān)鍵詞:可視化

葉剛

摘要

Quartz的可視化定時任務(wù)管理方案介紹了如何直觀、有效地管理諸多的定時任務(wù)。該方案高效管理著全部任務(wù)的執(zhí)行狀態(tài),直觀地在頁面顯示著他們的運行結(jié)果;任務(wù)調(diào)度失敗時,可以及時調(diào)出日志查明異常原因;同時在具有大量并發(fā)執(zhí)行定時任務(wù)的應(yīng)用系統(tǒng)中效率會大幅提升。

【關(guān)鍵詞】可視化 Quartz 定時任務(wù)

1 引言

定時任務(wù)指在特定的時間點(如:每天23:59:59),特定的時間段(如:每周一12:00-13:00),自行執(zhí)行的任務(wù)。伴隨著客戶的需求,軟件系統(tǒng)中會出現(xiàn)諸如此類的場景如:定期清理日志數(shù)據(jù),定時發(fā)送消息,定時更新與備份數(shù)據(jù),定期統(tǒng)計數(shù)據(jù)等等,它的出現(xiàn)解決了諸多上述類型的問題。如果它僅僅靠后臺處理執(zhí)行,我們無法直觀地知道它的運行的狀態(tài)即是否執(zhí)行,運行結(jié)果即是否成功以及運行異常。針對此種情況,Quartz的可視化定時任務(wù)管理方案可以幫助我們高效的管理定時任務(wù)。

2 Quartz概述

Quartz是一個使特定的功能在給定的時間點或時間范圍自行執(zhí)行的框架,即任務(wù)調(diào)度的框架,他有三個重要要素:

(1)調(diào)度任的調(diào)度器Scheduler,所有的任務(wù)執(zhí)行與否都由其控制;

(2)控制任務(wù)什么時候被調(diào)度器觸發(fā)的觸發(fā)器Trigger,觸發(fā)器可以設(shè)置任務(wù)才特定的時間或者時間段觸發(fā)與任務(wù)是否并發(fā)執(zhí)行等;

(3)設(shè)置任務(wù)執(zhí)行方法、任務(wù)標(biāo)識等作業(yè)屬性的JobDetail。

3 定時任務(wù)管理方案設(shè)計

在基于Quartz的可視化定時任務(wù)管理方案設(shè)計時,為了給予定時任務(wù)更高效、更直觀的管理方式,同時也為了對給每個任務(wù)的運行狀況的全面追蹤,故而此方案針對可視化以及定時任務(wù)的調(diào)度進(jìn)行了以下的設(shè)計:

3.1 可視化設(shè)計

可視化化設(shè)計是對所有任務(wù)進(jìn)行界面化的管理,針對每項定時任務(wù)的各項屬性,如任務(wù)的標(biāo)識、名稱、執(zhí)行狀態(tài)、調(diào)度表達(dá)式、任務(wù)數(shù)據(jù)路徑(類完整路徑)、任務(wù)執(zhí)行方法以及是否并發(fā)執(zhí)行等以一條完整記錄形式存入數(shù)據(jù)庫中。至此,一個個任務(wù)轉(zhuǎn)化成關(guān)系表中的一條條記錄,定時任務(wù)的可視化管理轉(zhuǎn)變?yōu)槌R姷年P(guān)系表的可視化管理。

3.2 定時任務(wù)調(diào)度設(shè)計

可視化設(shè)計僅僅是管理任務(wù)并未涉及到任務(wù)的調(diào)度,定時任務(wù)調(diào)度的設(shè)計也是重要的一環(huán),因此Quartz框架在此中必不可少。結(jié)合可視化的管理以及任務(wù)在被調(diào)度器調(diào)度時的運行狀態(tài),對定時任務(wù)的執(zhí)行過程做出以下設(shè)計:

由圖1可知定時任務(wù)的調(diào)度不僅僅是服務(wù)啟動時任務(wù)調(diào)度開始啟動,對于每個任務(wù)都包括啟動、執(zhí)行、暫停以及終止,通過狀態(tài)轉(zhuǎn)變以達(dá)到與可視化設(shè)計融合。

4 定時任務(wù)管理方案實現(xiàn)

4.1 可視化實現(xiàn)

(1)基于可視化設(shè)計,對定時任務(wù)表結(jié)構(gòu)進(jìn)行如下設(shè)計:

CREATE TABLE 'elt_job'(

'id'char(36)NOT NULL COMMENT'任務(wù)標(biāo)識',

'name'varchar(100)NOT NULLCOMMENT'任務(wù)隊列標(biāo)識名稱,取主鍵',

'group'varchar(100)NOT NULLCOMMENT'所屬群組',

'status'varchar(10)NOT NULL DEFAULT'0' COMMENT'任務(wù)狀態(tài)(運行中,暫停,終止)',

'exp'varchar(100)NOT NULLCOMMENT'調(diào)度表達(dá)式',

'mark'varchar(255)DEFAULT NULLCOMMENT'備注',

'bean'varchar(255)DEFAULT NULLCOMMENT'任務(wù)對象(包+類名)',

'is_con'bit(1)NOT NULL DEFAULT b'1'COMMENT'是否并發(fā)執(zhí)行',

'method_name'varchar(100)NOT NULLCOMMENT'任務(wù)執(zhí)行方法',

'create_time'datetime DEFAULT NULLCOMMENT'創(chuàng)建時間',

'title'varchar(60)DEFAULT NULLCOMMENT'任務(wù)簡述/名稱',

PRIMARY KEY('id'),

UNIQUE KEY'group'('name','group')USING BTREE

)ENGINE=InnoDB DEFAULTCFIARSET=utf8;

(2)②結(jié)合定時任務(wù)調(diào)的設(shè)計,頁面設(shè)計如下:

由圖2可知,通過基于Quartz的定時任務(wù)調(diào)度可視化界面實現(xiàn),能夠為用戶提供更直觀的定時任務(wù)執(zhí)行結(jié)果展示,進(jìn)而為定時任務(wù)執(zhí)行狀態(tài)以及異常原因提供更直觀的數(shù)據(jù)依據(jù)。

4.2 定時任務(wù)調(diào)度實現(xiàn)

任務(wù)調(diào)度是通過Quartz框架實現(xiàn)的,其中整個調(diào)度分為以下三步:

(1)根據(jù)需求創(chuàng)建需要定時執(zhí)行任務(wù)的方法;

(2)將上述的各個方法對應(yīng)按照規(guī)則存于定時任務(wù)表中;

(3)獲取任務(wù)方法,即獲取定時任務(wù)表數(shù)據(jù),結(jié)合Quartz框架將任務(wù)注冊于調(diào)度器,調(diào)度器控制定時任務(wù)運行狀態(tài)的主要代碼如下:

//獲取定時任務(wù)表中的記錄

ListeltJob List=eltJobMapper.selectByExample(new Criteria);

//獲取調(diào)度器Scheduler

Scheduler s=schedulerFactoryBean.getScheduler();

//根據(jù)任務(wù)中的名稱和任務(wù)組設(shè)置規(guī)則TriggerKey:

TriggerKey triggerKey=TriggerKey.triggerKey(eltJob.getName(),eltJob.getGroupo);

//組裝調(diào)度規(guī)則

CronTrigger trigger=(CronTrigger)scheduler.getTrigger(triggerKey);

//任務(wù)同步執(zhí)行還是異步執(zhí)行

Class cls=E1tJob.CONCURRENT IS.equals(concurrentld)?JobFactory.class:JobFactoryDisallowConcurrentExecution.class;

//通過class獲取job對象創(chuàng)建JobDetail實例

JobDetail detail=JobBuilder.newJob(cls).withIdentity(eltJob.getName(),eltJob.getGroup()).builds;

detail.getJobDataMap().put("job",eltJob);

//獲取調(diào)度表達(dá)式

CronScheduleBuilderscheduleBuilder=CronScheduleBuilder.cronSchedule(eltJob.getExp());

//創(chuàng)建調(diào)度觸發(fā)器trigger

trigger=TriggerBuilder.newTrigger().withIdentity(eltJob.getName(),eltJob.getGroup()).withSchedule(scheduleBuilder).build();

//在調(diào)度器上注冊Job及觸發(fā)器此時調(diào)度任務(wù)

s.scheduleJob(detail,trigger);

//啟動任務(wù)

s.start();

//根據(jù)任務(wù)名稱和任務(wù)組獲取JobKey:

JobKey key=JobKey.jobKey(eltJob.getName(),eltJob.getGroup());

//暫停任務(wù)

s.pauseJob(key);

//恢復(fù)任務(wù)

s.resumeJob(key);

//刪除任務(wù)

s.deleteJob(key);

(4)PostConstruct注解修飾的方法在項目啟動時執(zhí)行且僅執(zhí)行一次,由于項目啟動時伴隨定時指定定時任務(wù)被調(diào)用,需要增加一個由次注解修飾的啟動任務(wù)的方法,而此方法中考慮到部分定時任務(wù)不需隨項目啟動而被調(diào)度,會只調(diào)用定時任務(wù)表狀態(tài)staus=1(即為運行中)的任務(wù)。

5 總結(jié)

基于Quartz可視化定時任務(wù)管理不僅可以通過頁面直觀地展示各個任務(wù)運行狀態(tài),而且上次任務(wù)失敗原因也會被捕獲進(jìn)而在頁面上展示,方便了開發(fā)者或者運維人員及時地發(fā)現(xiàn)任務(wù)調(diào)度中存在的問題,以便快速的解決問題。另外,存在于項目中定時任務(wù)方法,沒有通過數(shù)據(jù)庫進(jìn)行管理的任務(wù)數(shù)據(jù),后期入庫后亦可在頁面上啟動此類任務(wù),此做法大幅度的節(jié)約了系統(tǒng)資源。存在大量并發(fā)方式調(diào)度定時任務(wù)的項目中,在Quartz框架中設(shè)置該類任務(wù)為并發(fā)執(zhí)行任務(wù),會大大提高定時任務(wù)的執(zhí)行效率,解決系統(tǒng)需要經(jīng)常性進(jìn)行的維護(hù)工作。

參考文獻(xiàn)

[1]劉光明,朱肖穎.Web應(yīng)用與Quartz的整合研究[J].企業(yè)科技與發(fā)展,2018(03).

[2]符宇航,鄭宗良,曾莉.基于Web的科研項目管理系統(tǒng)的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2016(27).

[3]許艷丹.基于Quartz.NET框架的任務(wù)調(diào)度平臺研究與設(shè)計[J].軟件導(dǎo)刊,2016(02).

[4]劉增杰,MySQL 5.7 從入門到精通[M].清華大學(xué)出版社,2016.

猜你喜歡
可視化
無錫市“三項舉措”探索執(zhí)法可視化新路徑
基于CiteSpace的足三里穴研究可視化分析
自然資源可視化決策系統(tǒng)
三維可視化信息管理系統(tǒng)在選煤生產(chǎn)中的應(yīng)用
基于Power BI的油田注水運行動態(tài)分析與可視化展示
自然資源可視化決策系統(tǒng)
基于CGAL和OpenGL的海底地形三維可視化
可視化閱讀:新媒體語境下信息可視化新趨勢
“融評”:黨媒評論的可視化創(chuàng)新
重大主題報道的可視化探索——以浙江日報的實踐為例
404 Not Found

404 Not Found


nginx
汤阴县| 谢通门县| 邳州市| 萍乡市| 溧阳市| 桐庐县| 科技| 红河县| 响水县| 沙河市| 龙岩市| 昭通市| 昌黎县| 黑山县| 句容市| 利津县| 清涧县| 永仁县| 正安县| 巴青县| 德阳市| 营山县| 彭州市| 青阳县| 科技| 麻栗坡县| 清流县| 新河县| 红原县| 白城市| 云安县| 乐亭县| 冷水江市| 喀喇沁旗| 日喀则市| 龙江县| 五华县| 德格县| 聂拉木县| 杂多县| 临泽县|