學(xué)習(xí)記錄之靜態(tài)資源服務(wù)器和Quartz
什么是靜態(tài)資源服務(wù)器
我們無論做什么項目,都會有一些頁面中需要顯示的靜態(tài)資源,例如圖片,視頻文檔等
我們一般會創(chuàng)建一個單獨的項目,這個項目中保存靜態(tài)資源
其他項目可以通過我們保存資源的路徑訪問

為什么需要靜態(tài)資源服務(wù)器
原因是靜態(tài)資源服務(wù)器可以將項目需要的所有圖片統(tǒng)一管理起來
當(dāng)其他模塊需要圖片時,可以從數(shù)據(jù)庫中直接獲得訪問靜態(tài)資源的路徑即可,方便管理所有靜態(tài)資源
Quartz
什么是Quartz
quartz:石英鐘的意思
是一個當(dāng)今市面上流行的高效的任務(wù)調(diào)用管理工具
由OpenSymphony開源組織開發(fā);
什么是任務(wù)調(diào)度
所謂任務(wù)調(diào)用,就是執(zhí)行某些具體動作的時間計劃
我們使用過的最簡單的調(diào)度方法就是Timer
但是Timer的調(diào)度功能過于單一,只能是指定時間的延時調(diào)用和周期運行
而Quartz可以更詳細的指定時間,進行計劃調(diào)用
Quartz核心組件
調(diào)度器:Scheduler
任務(wù):job
觸發(fā)器:Trigger
調(diào)度器來配置\計劃什么時間觸發(fā)什么任務(wù)
簡單來說就是調(diào)度器規(guī)定什么時間做什么事情
job(工作\任務(wù)):Quartz 實現(xiàn)過程中是一個接口,接口中有一個方法execute(執(zhí)行的意思)
?我們創(chuàng)建一個類,實現(xiàn)這個接口,在方法中編寫要進行的操作(執(zhí)行具體任務(wù))
?我們還需要一個JobDetail的類型的對象,Quartz每次執(zhí)行job時
?會實例化job類型對象,去調(diào)用這個方法,JobDetail是用來描述Job實現(xiàn)類
?的靜態(tài)信息,?比如任務(wù)運行時在Quartz中的名稱
Trigger(觸發(fā)器):能夠描述觸發(fā)指定job的規(guī)則,分為簡單觸發(fā)和復(fù)雜觸發(fā)
簡單觸發(fā)可以使用SimplTrigger實現(xiàn)類.功能類似timer
復(fù)雜觸發(fā)可以使用CronTrigger實現(xiàn)類,內(nèi)部利用cron表達式描述各種復(fù)雜的時間調(diào)度計劃
Scheduler(調(diào)度器):一個可以規(guī)定哪個觸發(fā)器綁定哪個job的容器
在調(diào)度器中保存全部的Quartz?保存的任務(wù)
SpringBoot框架下,添加Quartz依賴后,調(diào)度器由SpringBoot管理,我們不需要編寫
Cron表達式

* 表示任何值,如果在分的字段上編寫*,表示每分鐘都會觸發(fā)
, 是個分割符如果秒字段我想20秒和40秒時觸發(fā)兩次就寫 20,40
- 表示一個區(qū)間 秒字段5-10 表示 5,6,7,8,9,10
/ 表示遞增觸發(fā) 秒字段 5/10表示5秒開始每隔10秒觸發(fā)一次
日字段編寫1/3表示從每月1日起每隔3天觸發(fā)一次
? 表示不確定值, 因為我們在定日期時,一般確定日期就不確定是周幾,相反確定周幾時就不確定日期
L 表示last最后的意思,我們可以設(shè)置當(dāng)月的最后一天,就會在日字段用L表示,
周字段使用L表示最后一周,一般會和1-7的數(shù)字組合
例如6L表示本月最后一周的周五
W (work)表示最近的工作日(單純的周一到周五) 如果日字段編寫15W表示
每月15日最近的工作日觸發(fā),如果15日是周六就14日觸發(fā),如果15日是周日就16日觸發(fā)
?LW通常一起使用,表示本月的最后一個工作日
# 表示第幾個,只能使用在周字段上 6#3表示每月的第三個周五
如果#后面數(shù)字寫大了,是一個不存在的日期,那就不運行了
適合設(shè)計在母親節(jié)或父親節(jié)這樣的日期運行
SpringBoot使用Quartz
SpringBoot框架下使用Quartz格式還是非常固定的
我們選用之前學(xué)習(xí)微服務(wù)的項目csmall減少對大項目的影響
首先添加依賴
我們選項csmall-stock-webapi模塊pom文件
先編寫要執(zhí)行的任務(wù)
當(dāng)前項目模塊中創(chuàng)建quartz包
包中創(chuàng)建一個QuartzJob的類,實現(xiàn)Job接口
代碼如下
上面編寫的是Job接口的實現(xiàn)類,要想運行還需要將它封裝為JobDetail對象保存在Spring容器中
還有要創(chuàng)建一個Trigger設(shè)置要運行的時機,也保存到Spring容器中
在quartz包下,再創(chuàng)建一個QuartzConfig類,其中編寫它們的調(diào)度綁定關(guān)系
這個格式是固定的,后面再需要綁定,直接套用即可