摘要:是一個任務調度框架,由語言開發,可以用來做一些定時發送,監聽事件等工作。包下完成調度需要步告訴調度器要做什么。告訴調度器什么時候做。任務監聽器兩個接口分別是觸發器相關的監聽接口和作業相關監聽接口。
Quartz是一個任務調度框架,由Java語言開發,可以用來做一些定時發送,監聽事件等工作。
例如:讓一個程序每天晚上12點執行一次。或者每隔5秒執行一次。
jar: org.quartz-scheduler包下
Quartz完成調度需要3步
JobDetail:告訴調度器要做什么。 Trigger:告訴調度器什么時候做。 Scheduler:準備妥了就從這里start
下面就是一個簡單的spring 整合quartz的實例。
簡單實現先看JobDetail部分:寫一個類實現Job接口,重寫execute()方法,在該方法中寫要執行的邏輯,(告訴調度器要做什么)
public class UpdateProductJob implements Job{ @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { try { System.out.print("我來檢查啦") }catch (Exception e){ System.out.println(e); } } }
然后是配置xml文件。
從上面可以看到有兩個Trigger分別是simpleTrigger和cronTrigger,這是兩種表達執行時間的方式。
simpleTrigger是比較簡單的方法,解決spring注入問題表示間隔5秒執行一次 而cronTrigger可以表達一些比較復雜的時間格式 表示每天23點59分執行一次 具體的語法請搜索cron表達式,有些網站提供了自動生成cron表達式的功能 比如http://cron.qqe2.com/ or http://www.cronmaker.com/
在spring框架中會經常用到IOC,那么在上面的execute()方法中不避免的也會用到注入,但是對于新手來說會遇到注入的接口會是null。
解決這個問題有兩個方法:
1.使用ApplicationContex對象加載applicationContext.xml文件注入UserDaoI接口,但是這個方法不好的一點是每當用一個接口就要寫一個,比較麻煩。
ApplicationContext content = new ClassPathXmlApplicationContext("classpath:META-INF/applicationContext.xml"); userDaoI = content.getBean(UserDaoI.class);
2.第二個方法比較好,先寫一個類繼承AdaptableJobFactory 抽象方法,不需要任何改動
@Service("jobFactory") public class JobFactory extends AdaptableJobFactory { @Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { // 調用父類的方法 Object jobInstance = super.createJobInstance(bundle); // 進行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; } }
2.2然后將這個類添加到配置文件里。
最后完整的配置信息是:
JobDetail部分就可以這樣寫了
@Service public class UpdateProductJob implements Job{ @Autowired ArticleService articleService; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { try { articleService.updateArticleType(); }catch (Exception e){ System.out.println(e); } } }Quartz輪訓方式
Quartz輪訓任務,需要配置一個參數,這個參數來控制Job任務是否并行,這個參數是concurrent。默認是true,如果concurrent設為true,到了指定的時間就如去執行,不管上一次有沒有執行完。
任務監聽器execute false
TriggerListeners and JobListeners 兩個接口分別是觸發器相關的監聽接口和作業相關監聽接口。
用來監聽監聽點之前,之中,之后需要處理的事情。
此外,也可以直接繼承JobListenerSupport or TriggerListenerSupport
并且在配置文件添加以下內容來生效監聽器:
除了可以配置全局的,也可以根據業務按個,按組配置監聽器。
Quartz 2.3.0
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68319.html
摘要:而我這里定時任務的觸發是要通過接口的方式來觸發,所以只用實現以下的調度器即可。我這里簡單說下任務的調度器,具體的任務類,觸發器,任務什么時候執行是由它決定的。遇到的坑解決方式這個是因為不兼容的問題,所以使用是不會出現這個錯誤的。 實現定時任務的幾種方式: 1.使用linux的crontab 優點: 1.使用方式很簡單,只要在crontab中寫好 2.隨時可以修改,不需要...
摘要:本文使用實現對定時任務的增刪改查啟用停用等功能。并把定時任務持久化到數據庫以及支持集群。決定什么時候來執行任務。定義的是任務數據,而真正的執行邏輯是在中。封裝定時任務接口添加一個暫停恢復刪除修改暫停所有恢復所有 簡介 Quartz是一款功能強大的任務調度器,可以實現較為復雜的調度功能,如每月一號執行、每天凌晨執行、每周五執行等等,還支持分布式調度。本文使用Springboot+Myba...
閱讀 2974·2021-10-27 14:16
閱讀 695·2021-10-13 09:39
閱讀 3670·2021-09-29 09:46
閱讀 2090·2019-08-30 15:54
閱讀 2597·2019-08-30 15:52
閱讀 2994·2019-08-30 15:44
閱讀 1103·2019-08-30 15:44
閱讀 497·2019-08-30 10:51