版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、作業(yè)調(diào)度框架 Quartz 學(xué)習(xí)筆記 (二 )簡單回顧一下上一節(jié)學(xué)習(xí)到的 HelloWorld 1創(chuàng)建一個(gè)job類,實(shí)現(xiàn)Job接口,覆蓋public voidexecute(JobExecutionContext context) 方法,在方法中寫入你 要執(zhí)行的操作 (數(shù)據(jù)導(dǎo)入 /備份 ,輪詢檢查文件等 )代碼2 創(chuàng)建一個(gè)主線程類 , 獲得 Scheduler 對象 SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler(); 獲得要執(zhí)行的對象 JobDetail job = newJo
2、b(HelloJob.class).withIdentity(job1, group1).build();定義觸發(fā)器 Trigger trigger = newTrigger().withIdentity(trigger1, group1).startAt(runTime).build();將任務(wù)和 Trigger 放入 scheduler : sched.scheduleJob(job, trigger);啟動(dòng) 和 停止sched.start(); sched.shutdown(true);注意 給 job 留有足夠長的時(shí)間 ,如果主線程類停止工作,job線程也會(huì)停止工作我是分割線經(jīng)過了 H
3、elloWorld 之后 ,您老人家可能對 Quartz 有所了 解,下面讓我們繼續(xù)深入 ,學(xué)習(xí)下 Quartz 重復(fù)執(zhí)行任務(wù)該怎么 做簡單的說就是 觸發(fā)器(Trigger)的參數(shù)設(shè)置什么?觸發(fā)器(Trigger) 不知道是什么 ?出門左轉(zhuǎn) << 作業(yè)調(diào)度框架 Quartz 學(xué)習(xí)筆記(一 )>>不謝還是老套路 ,一個(gè) job 類 ,一個(gè)主線程類SimpleJob.javajava view plaincopypublic class SimpleJob implements JobOverridepublic voidexecute(JobExecutionContex
4、t context)throwsJobExecutionException / job 的名字String jobName = context.getJobDetail().getKey().getName();/ 任務(wù)執(zhí)行的時(shí)間SimpleDateFormat dateFormat= new SimpleDateFormat(yyyy 年 MM 月 dd 日 HH 時(shí) mm 分 ss 秒);String jobRunTime =dateFormat.format(Calendar.getInstance().getTime();/ 輸出任務(wù)執(zhí)行情況任務(wù) : + jobName + 在 +jo
5、bRunTime + 執(zhí)行了); 在這里 對輸出 的日期進(jìn)行了一小下 格式化 ,適應(yīng)國人習(xí) 慣.其它沒什么好說的 0.0SimpleTriggerExample.java/* * SimpleTriggers ( 簡單觸發(fā)器 ) 的使用 . */ public classSimpleTriggerExample public static void main(String args) throws Exception SimpleTriggerExample example = new SimpleTriggerExample(); example.run(); public void run
6、() throws Exception / 日期格式化 SimpleDateFormat dateFormat = new SimpleDateFormat(yyyy 年 MM 月 dd 日 HH 時(shí) mm 分 ss 秒 );SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler();System.out.println(/ 下一個(gè)第 15 秒 例 : 則 執(zhí)行時(shí)間為 15 秒 執(zhí)行時(shí)間為 30 秒 行時(shí)間為 45 秒 時(shí)間為 00 秒 初始化/Date startTime =); 當(dāng)
7、前 10 秒, 當(dāng)前 16 秒 ,則 當(dāng)前 33 秒 ,則 執(zhí) 當(dāng)前 48 秒 ,則 執(zhí)行DateBuilder.nextGivenSecondDate(null, 15); / job1 將只會(huì)執(zhí)行一次JobDetail job =newJob(SimpleJob.class).withIdentity(job1, group1).build(); SimpleTrigger trigger = (SimpleTrigger) newTrigger() .withIdentity(trigger1, group1).startAt(startTime).build();/ 把 job1 和
8、trigger 加入計(jì)劃 . ft: 此任務(wù)要執(zhí)行的時(shí)間Date ft = + 將在 : + dateFormat.format(ft) + 時(shí)運(yùn)行 .并且重復(fù) : + trigger.getRepeatCount() + 次 , 每次間隔 + trigger.getRepeatInterval() / 1000 + 秒 );/job2 將只會(huì)和執(zhí)行一次 (和 job1 一樣一樣的 ,吼 ) job = newJob(SimpleJob.class).withIdentity(job2, group1).build();trigger = (SimpleTrigger)newTrigger()
9、 .withIdentity(trigger2, group1).startAt(startTime).build(); ft = sched.scheduleJob(job, trigger);+ 將在 : + dateFormat.format(ft) + 時(shí)運(yùn)行 .并且重復(fù) : + trigger.getRepeatCount() + 次 , 每次間隔 + trigger.getRepeatInterval() / 1000 + 秒 );/job3 將執(zhí)行 11次(執(zhí)行 1次,重復(fù) 10次) ,每 10秒重復(fù)一次job = newJob(SimpleJob.class).withIden
10、tity(job3,group1).build();trigger =newTrigger().withIdentity(trigger3,group1).startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(10)/ 重復(fù)間隔.withRepeatCount(10)/ 重復(fù)次數(shù).build();ft = sched.scheduleJob(job, trigger); 將在 : + dateFormat.format(ft) + 時(shí)運(yùn)行 .并且重復(fù) : + trigger.getRepeatCount()
11、 + 次 , 每次間隔 + trigger.getRepeatInterval() / 1000 + 秒 );/ trigger3 改變了 . 每隔 10s 重復(fù) .共重復(fù) 2 次此處說明 , 上面 job3 已經(jīng) 設(shè)定了 trigger3 重復(fù) 10 次,每次10s/在這里又改變了 trigger3 的設(shè)置 ,不會(huì)對以前構(gòu)成影響,而是當(dāng)做一個(gè)新的來處理trigger =newTrigger().withIdentity(trigger3,group2).startAt(startTime).withSchedule(simpleSchedule()s(10).withIntervalInSe
12、cond.withRepeatCount(2).forJob(job).build(); ft =sched.scheduleJob(trigger);System.out.println(job.getKey().getName() + 改變過 trigger3 屬性的 job3 : + dateFormat.format(ft) + 時(shí)運(yùn)行 .并且重復(fù) :+ trigger.getRepeatCount() + 次 , 每次 間隔 + trigger.getRepeatInterval() / 1000 + 秒);/ job5 將在 5 分鐘后運(yùn)行一次job = newJob(Simple
13、Job.class).withIdentity(job5, group1).build();trigger = (SimpleTrigger)newTrigger() .withIdentity(trigger5, group1) .startAt(futureDate(5, IntervalUnit.MINUTE) / 設(shè)定 5 分鐘后運(yùn) 行 .build(); ft = sched.scheduleJob(job, trigger);將在 : + dateFormat.format(ft) + 時(shí)運(yùn)行 .并且重復(fù) : + trigger.getRepeatCount() + 次 , 每次間
14、隔 /+ trigger.getRepeatInterval() / 1000 + 秒 );job6 每 40s 運(yùn)行一次 ,沒有指定重復(fù)次數(shù) ,則無下限的重復(fù)job = newJob(SimpleJob.class).withIdentity(job6, sched.scheduleJob(job, trigger);group1).build();trigger =newTrigger().withIdentity(trigger6,group1).startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(
15、40).repeatForever().build();ft =+ 將在 : + dateFormat.format(ft) + 時(shí)運(yùn)行 .并且重復(fù) : + trigger.getRepeatCount() + 次 , 每次間隔 + trigger.getRepeatInterval() / 1000 + 秒 );/所有的任務(wù)都被加入到了 scheduler 中 ,但只有schedulers.start(); 時(shí)才開始執(zhí)行 開始調(diào)度 (調(diào)用 .start() 方法 ); 系統(tǒng) 啟 動(dòng) 的 時(shí)間 : + dateFormat.format(new Date();/ 在 scheduled.sta
16、rt(); 之后 ,還可以將 jobs 添加到執(zhí)行計(jì)劃 中 / job7 將重復(fù) 20 次 ,每 5 分鐘重復(fù)一次job = newJob(SimpleJob.class).withIdentity(job7,group1).build(); newTrigger() group1).withSchedule( chedule() s(5) / 5 分 鐘trigger = .withIdentity(trigger7,.startAt(startTime)simpleS.withRepeatCount(20).build();.withIntervalInMinute/ 重復(fù) 20 次ft
17、= sched.scheduleJob(job, trigger);+ 將在 : + dateFormat.format(ft) + 時(shí)運(yùn)行 .并且重復(fù) : + trigger.getRepeatCount() + 次 , 每次間隔 + trigger.getRepeatInterval() / 1000 + 秒 );/job8 可以立即執(zhí)行 . 無 trigger 注冊 job = 手動(dòng)觸發(fā) job8.( 立即執(zhí)行 );sched.triggerJob(jobKey(job8, group1);System.out.println(等待 30 秒. );try Thread.sleep(30
18、L * 1000L); catch (Exception e) / job7 將馬上執(zhí)行 ,重復(fù)10 次 ,每秒一次System.out.println( 重新安排 . );trigger =newTrigger().withIdentity(trigger7,group1).startAt(startTime).withSchedule(simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20).build(); ft = sched.rescheduleJob(trigger.getKey(), trigger);被重新安排
19、在 : +dateFormat.format(ft) + 執(zhí)行 . r 當(dāng)前時(shí)間 : + dateFormat.format(new Date()+ 預(yù)定執(zhí)行時(shí)間已過 ,任務(wù)立即 執(zhí)行 ); try 等待 5 分鐘 .);Thread.sleep(300L * 1000L); catch (Exception e) 調(diào)度已關(guān)閉 ); / 顯示一下 已經(jīng)執(zhí)行的任務(wù)信息SchedulerMetaData metaData =sched.getMetaData();執(zhí)行了 + metaData.getNumberOfJobsExecuted() + 個(gè) jobs.); 幾點(diǎn)說明 :1 DateBuilder.next
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024幼兒入園協(xié)議書及幼兒園環(huán)保教育實(shí)施合同3篇
- 二零二五年二手車貸款貸前調(diào)查與審批合同2篇
- 二零二五年度個(gè)人小額農(nóng)產(chǎn)品銷售借款合同2篇
- 2024年環(huán)境監(jiān)測儀器研發(fā)與制造合同
- 2024年貨物供應(yīng)招投標(biāo)合同3篇
- 2025年度BIM技術(shù)在智慧社區(qū)管理中的應(yīng)用合同3篇
- 二零二五年度上海市存量房買賣合同交易誠意金支付及退還
- 二零二五年工廠食堂員工營養(yǎng)餐品配送承包合同3篇
- 17、2025年度接送機(jī)服務(wù)及機(jī)場候機(jī)樓餐飲服務(wù)合同3篇
- 2024年高校校園餐飲服務(wù)承包合同
- 心理健康教育(共35張課件)
- GB/T 44271-2024信息技術(shù)云計(jì)算邊緣云通用技術(shù)要求
- 工業(yè)項(xiàng)目投資估算及財(cái)務(wù)評(píng)價(jià)附表(有計(jì)算公式)
- 2024-2030年中國Micro LED行業(yè)發(fā)展現(xiàn)狀調(diào)研及市場前景趨勢報(bào)告
- 高中英語外研版 單詞表 必修2
- 2024-2030年中國蓖麻行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報(bào)告
- 2025國家開放大學(xué)電大??啤痘A(chǔ)寫作》期末試題及答案(試卷號(hào)2412)
- 用所給詞的適當(dāng)形式填空(專項(xiàng)訓(xùn)練)人教PEP版英語六年級(jí)上冊
- 2024年全國職業(yè)院校技能大賽“新型電力系統(tǒng)與維護(hù)”賽項(xiàng)考試題庫-中(多選題)
- DL∕T 677-2018 發(fā)電廠在線化學(xué)儀表檢驗(yàn)規(guī)程
- 馬克思主義與社會(huì)科學(xué)方法論課后思考題答案全
評(píng)論
0/150
提交評(píng)論