Quartz任務執行

2021-08-27 15:00:09 字數 1725 閱讀 8380

quartz任務排程器,有個很憂傷的限制,就是提交的任務只能指定job class型別,具體job的例項例項化有quartz來建立,且任務每次執行都會建立乙個job例項,在某些場景下,我們可能需要傳遞乙個job例項(比如job的屬性有其他方式注入),那麼直接使用quartz則不太能滿足,我們需要借助datamap來傳遞自己的例項.例如:

cronschedulebuilder sb = cronschedulebuilder.cronschedule(cronexpression);

trigger trigger = triggerbuilder.newtrigger().withidentity(key, group).withschedule(sb).build();

//如果任務已經在執行,則返回

if(scheduler.checkexists(trigger.getkey()))

classjobclass = myjob.class;

jobdetail job = jobbuilder.newjob(jobclass).withidentity(key, group).build();

scheduler.schedulejob(job, trigger);

其中myjob就是我們自己的job類,他實現了job介面..接下來我們使用一種變通的方式來使用quartz.:

1. jobexecutor介面: 所有的可執行任務,都需要實現這個介面 .

public inte***ce jobexecutor
2. jobproxy類:當任務排程時,充當**層,間接的執行jobexecutor例項方法.

public class jobproxy implements job 

trycatch(exception e)

}}

3. jobscheduler類:任務的排程與取消

public class jobscheduler 

public boolean schedule(string key,string cronexpression,jobexecutor executor)

classjobclass = jobproxy.class;

jobdetail job = jobbuilder.newjob(jobclass).withidentity(key, group).build();

job.getjobdatamap().put(utils.worker_id, key); //for get

job.getjobdatamap().put(utils.worker_caller, executor); //for get

scheduler.schedulejob(job, trigger);

// 任務排程列表

return true;

} catch (exception e)

return false;

}public boolean unschedule(string key)

return true;

} catch (exception e)

return false;

}}

並沒有特別神秘的地方,只是借助了datamap來儲存jobdetetail的例項. 

quartz任務並行

任務有並行和序列之分,並行是指 乙個定時任務,當執行時間到了的時候,立刻執行此任務,不管當前這個任務是否在執行中 序列是指 乙個定時任務,當執行時間到了的時候,需要等待當前任務執行完畢,再去執行下乙個任務。quartz框架中防止任務並行可以有兩種方案 1 如果是 通過methodinvokingjo...

quartz石英任務

定時任務 quartz 的幾大核心概念 job 任務 我們需要完成的事情 要炸大本營 jobdetail 任務詳情 任務怎麼做,誰來做 執行任務需要的物件,資料資訊等 張三,50噸tnt quartz 為了併發執行 job 定義任務怎麼執行的類 jobdetail 當次執行的例項 trigger 觸...

任務排程 Quartz

首先,quartz是什麼 先看看我們生活中的例子 每月的2月21號提醒我今天是男朋友的生日 每月的17號提醒我大姨媽快要來了 每隔一小時提醒我起來走走運動運動 就是在某乙個有規律的時間點乾某件事。並且時間的觸發的條件可以非常複雜 比如每月最後乙個工作日的17 50 複雜到需要乙個專門的框架來幹這個事...