日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring定時服務QuartZ原理及代碼案例

瀏覽:102日期:2023-07-31 18:53:37

在JavaEE系統中,我們會經常用到定時任務,比如每天凌晨生成前天報表,每一小時生成匯總數據等等。

我們可以使用java.util.Timer結合java.util.TimerTask來完成這項工作,但時調度控制非常不方便,并且我們需要大量的代碼。

使用Quartz框架無疑是非常好的選擇,并且與Spring可以非常方便的集成。

Spring提供了支持時序調度的整合類。整個構建任務調度服務需要三步:

1)向項目中添加jar包:添加quartz.jar包,將他加到你工程的classpath中去。

2)寫Class文件,在文件中定義你要執行操作的函數你就可以通過配置來達到定時操作了。

3)提供applicationContext.xml Spring配置文件,其中配置你的定時發送操作以及設置定時器的各種屬性(包括運行頻率和初始運行時機)。 

小編做了一個每5秒打印一次當前時間的例子,具體請參考源碼,尤其注意配置文件的寫法。(詳見下面“示例”)

什么是Quartz?

Quartz是一個強大的企業級任務調度框架。它允許開發人員靈活地定義觸發器的調度時間表,并可對觸發器和任務進行關聯映射。此外,Quartz提供了調度運行環境的持久化機制,可以保存并會發調度現場,即使系統因故障關閉,任務調度現場數據并不會丟失。Spring中繼承并簡化了Quartz。

如何使用Quartz?

對于Quartz,我們使用的時候主要是注重兩個方面,一個是定時任務的業務,另一個就是Cron表達式。

1>Quartz存在兩種方式來定義定時執行任務,一種是使用QuartJobBean和JobDetailBean;另一種是使用MethodInvokingJobDetailFactoryBean。

2>Cron表達式包括下面7個字段并區別順序:秒0-59,分0-59,小時0-23,月內日期1-31,月1-12或者JAN-DEC,周內日期1-7或者SUN-SAT,年(可選字段)留空或者1970-2099并且通過特殊字符表示特殊意義,具體為下:

斜線(/)字符表示增量值。例如,在秒字段中'5/15'代表從第5秒開始,每15秒一次。 問號(?)字符和字母L字符只有在月內日期和周內日期字段中可用。問號表示這個字段不包含具體值。所以,如果指定月內日期,可以在周內日期字段中插入'?',表示周內日期值無關緊要。這里有個很蛋疼的設定,無關Quartz,而是Spring集成Quartz后,它自己加的一個約束,那就是:日期(1-31)和星期(SUN-SAT)兩者,必須有一個是問號(?),系統在啟動的時候,Spring會檢查表達式,如果不符合它的規則,就會拋異常。所以在使用的時候這個地方一定要注意,而這個在Linux上執行Cron是沒有這個限制的。 字母L字符是last的縮寫。放在月內日期字段中,表示安排在當月最后一天執行。在周內日期字段中,如果'L'單獨存在,就等于'7',否則代表當月內周內日期的最后一個實例。所以'0L'表示安排在當月的最后一個星期日執行。 字母(W)字符把執行安排在最靠近指定值的工作日。把'1W'放在月內日期字段中,表示把執行安排在當月的第一個工作日內。 井號(#)字符為給定月份指定具體的工作日實例。把'MON#2'放在周內日期字段中,表示把任務安排在當月的第二個星期一。 星號(*)字符是通配字符,表示該字段可以接受任何可能的值、表達式例子。

例子:

'0 0 08 * * ?' 每天上午8點觸發'0 15 10 ? * *' 每天上午10:15觸發'0 15 10 * * ?' 每天上午10:15觸發'0 15 10 ? * 6L 2009-2019' 2009年至2019年的每月的最后一個星期五上午10:15觸發'0 15 10 ? * 6#3' 每月的第三個星期五上午10:15觸發

【示例】

我們使用Spring定時服務Quartz來實現一個每5秒打印一次當前時間的小例子。

1:定義接口IPrintInfoService類

package demoinfo.spring.quartz;public interface IPrintInfoService { public void print();}

2:實現接口類PrintInfoServiceImpl

package demoinfo.spring.quartz;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import demoinfo.spring.quartz.IPrintInfoService;public class PrintInfoServiceImpl implements IPrintInfoService{ public void print() { Calendar now = Calendar.getInstance(); System.out.println('現在是北京時間:' + this.format(now.getTime())); } public String format(Date date){ SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss'); return sdf.format(date); }}

3:基于QuartzJobBean的實現類PrintInfoJob

package demoinfo.spring.quartz;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.scheduling.quartz.QuartzJobBean;import demoinfo.spring.quartz.IPrintInfoService;public class PrintInfoJob extends QuartzJobBean{ private IPrintInfoService prinfInfoService = null; public IPrintInfoService getPrinfInfoService() { return prinfInfoService; } public void setPrinfInfoService(IPrintInfoService prinfInfoService) { this.prinfInfoService = prinfInfoService; } @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { this.prinfInfoService.print(); }}

4:Spring配置文件applicationContext.xml

<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:context='http://www.springframework.org/schema/context' xmlns:tx='http://www.springframework.org/schema/tx' xsi:schemaLocation='http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd'> <bean /> <!-- 配置一個Job --> <bean class='org.springframework.scheduling.quartz.JobDetailBean'> <property name='jobClass' value='demoinfo.spring.quartz.PrintInfoJob' /> <property name='jobDataAsMap'> <map><entry key='prinfInfoService' value-ref='printInfoService'></entry> </map> </property> </bean> <!-- 簡單的觸發器 --> <bean class='org.springframework.scheduling.quartz.SimpleTriggerBean'> <property name='jobDetail'> <ref bean='printInfoJob' /> </property> <property name='startDelay'> <value>6000</value> </property> <property name='repeatInterval'> <value>6000</value> </property> </bean> <!--復雜的觸發器 --> <bean class='org.springframework.scheduling.quartz.CronTriggerBean'> <property name='jobDetail'> <ref bean='printInfoJob' /> </property> <property name='cronExpression'> <value>00,05,10,15,20,25,30,35,40,45,50,55 * * * * ?</value> </property> </bean> <!-- spring觸發工廠 --> <bean class='org.springframework.scheduling.quartz.SchedulerFactoryBean'> <property name='triggers'> <list><ref bean='complexPrintInfoTrigger' /> </list> </property> </bean></beans>

5:測試用例類SpringQuartzDemo

package demoinfo.spring.quartz;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringQuartzDemo { public static void main(String[] args) { System.out.println('測試開始......'); new ClassPathXmlApplicationContext('classpath:demoinfo/spring/quartz/applicationContext.xml'); System.out.println('測試結束......'); }}

運行測試用例,可以看到控制臺每過5秒鐘就打印一次時間信息。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产在线日韩精品| 在线看片国产福利你懂的| 久久精品官网| 婷婷综合网站| 亚洲自拍另类| 日本a级不卡| 国产精品宾馆| 日韩精品免费一区二区在线观看 | 国产精品一区二区三区四区在线观看 | 国产99精品| 亚洲精品成人| 婷婷五月色综合香五月| 久久久国产精品网站| 日本少妇一区| 日韩精品一二三四| 久久超级碰碰| 欧美日韩中文一区二区| 亚洲主播在线| 免费一级欧美片在线观看网站| 亚洲国产福利| 免费中文字幕日韩欧美| 97久久中文字幕| 午夜精品成人av| 亚洲va久久| 亚洲精品**中文毛片| 综合激情网...| 麻豆中文一区二区| 一本一道久久a久久精品蜜桃| 少妇高潮一区二区三区99| 国产不卡精品| 一区二区精彩视频| 国产精品久久久久蜜臀| 国产精品美女久久久| 久久伊人亚洲| 先锋亚洲精品| 国产精选在线| 丝袜亚洲另类欧美| 日韩av在线播放网址| 中文在线日韩| 欧美色图一区| 精品资源在线| 亚洲色图国产| 99久久亚洲精品| 久久av电影| 石原莉奈在线亚洲三区| 鲁鲁在线中文| 欧美日韩一区二区三区四区在线观看| 日韩天堂在线| 免费日韩一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 精品成人免费一区二区在线播放| 石原莉奈在线亚洲二区| 欧美羞羞视频| 国产精品一区二区三区四区在线观看| 婷婷亚洲五月| 日韩毛片视频| 久久精品一区二区国产| 一区二区电影| 在线成人直播| 成人欧美一区二区三区的电影| 亚洲一二av| 蜜臀久久99精品久久一区二区| 国产精品久久久久久久免费软件| 日韩中文字幕av电影| 久久中文亚洲字幕| 国产精品99视频| 国产精品流白浆在线观看| 免费在线观看一区二区三区| 欧美日韩精品免费观看视完整 | 红桃视频国产一区| 免费在线小视频| 精品久久电影| 国产精品任我爽爆在线播放| 欧美专区18| 亚洲激精日韩激精欧美精品| 久久精品亚洲人成影院| 日韩欧美一区二区三区在线观看 | 精品一区电影| 国产调教精品| 日韩av中文在线观看| 免费在线观看不卡| 国产亚洲毛片| 国产99久久久国产精品成人免费| 久久不卡国产精品一区二区| 国产欧美高清| 国产精品v一区二区三区| 国产亚洲观看| 国产精品天天看天天狠| 国产精品3区| 国产精品大片免费观看| 久久av电影| 国产一区精品福利| а√天堂中文在线资源8| 日韩大片在线观看| 91精品精品| 九一精品国产| 亚洲一区二区三区高清不卡| 久久婷婷亚洲| 婷婷亚洲综合| 一二三区精品| 日精品一区二区三区| 日韩不卡一区二区| 国产精品密蕾丝视频下载| 另类小说一区二区三区| 精品国产三区在线| www.com.cn成人| 免费国产自久久久久三四区久久 | 久久国产精品久久久久久电车| 国产一区亚洲| 亚洲一区黄色| 日韩在线麻豆| 国产日韩一区二区三区在线| 麻豆91小视频| 久久国产日韩| 中文精品在线| 欧美欧美黄在线二区| 精品网站aaa| 久久国产中文字幕| 午夜在线视频观看日韩17c| 天堂俺去俺来也www久久婷婷| 日韩av在线播放中文字幕| 精品国产午夜肉伦伦影院 | 国产一精品一av一免费爽爽| 久久精品国产成人一区二区三区| 欧美gv在线| 三级欧美韩日大片在线看| 国产精品一线天粉嫩av| 精品日韩视频| 亚久久调教视频| 国产一区二区视频在线看| 五月天久久网站| 国产剧情在线观看一区| 久久视频一区| 久久精品 人人爱| 成人国产精品一区二区网站| 午夜视频精品| 国产精品日本一区二区不卡视频 | 女人天堂亚洲aⅴ在线观看| 亚洲精品一级| 国产成人免费精品| 亚洲视频二区| 91中文字幕精品永久在线| 麻豆9191精品国产| 色婷婷综合网| 国产亚洲一区在线| 免费在线观看一区| 蜜乳av另类精品一区二区| 麻豆视频一区二区| 视频一区欧美精品| 综合日韩av| 日韩高清不卡一区| 欧美aa在线观看| 国产日韩欧美一区二区三区| 久久久久欧美精品| 欧美一级全黄| 国产在线成人| 鲁大师精品99久久久| 蜜桃一区二区三区在线| 天堂中文av在线资源库| 免费观看在线综合色| 福利在线免费视频| 欧美亚洲福利| 午夜在线观看免费一区| 伊人久久高清| 麻豆91精品91久久久的内涵| 亚洲精品激情| 精品一区欧美| 日韩欧美一区二区三区免费观看| 欧美日一区二区在线观看| 午夜欧美精品| 日韩中文首页| 国模大尺度视频一区二区| 青青在线精品| 亚洲精品三级| 国产在线日韩| 91亚洲人成网污www| 国产麻豆精品| 日本成人中文字幕在线视频| 欧美午夜不卡影院在线观看完整版免费| 精品国产亚洲日本| 国产精品三级| 国产精品久久久久久久久久白浆| 麻豆免费精品视频| 国产婷婷精品| 久久亚洲成人| 97久久亚洲| 亚洲一区二区网站| 久久精品国内一区二区三区水蜜桃| 国产剧情在线观看一区| 老色鬼久久亚洲一区二区| 日韩精品一卡| 蜜桃91丨九色丨蝌蚪91桃色| 久久精品资源| 国产精品亚洲产品| 日韩中文字幕| 日韩在线观看一区二区三区| 美女久久一区| 男女精品网站| 亚洲一区观看| 视频一区视频二区中文字幕|