xxl-job簡單應(yīng)用

xxl-job的github地址:https://github.com/xuxueli/xxl-job
運行環(huán)境:Maven3+; Jdk1.8+; Mysql5.7+

一. 快速使用

1. 初始化數(shù)據(jù)庫

sql文件存放路徑:/xxl-job/doc/db/tables_xxl_job.sql

2. 源碼結(jié)構(gòu)

xxl-job-admin:調(diào)度中心
xxl-job-core:公共依賴
xxl-job-executor-samples:執(zhí)行器Sample示例(選擇合適的版本執(zhí)行器,可直接使用蒋困,也可以參考其并將現(xiàn)有項目改造成執(zhí)行器)

xxl-job-executor-sample-springboot:Springboot版本汰聋,通過Springboot管理執(zhí)行器髓梅,推薦這種方式奢方;
xxl-job-executor-sample-frameless:無框架版本鹊奖;

3. 快速啟動

3.1 xxl-job-admin:調(diào)度中心

調(diào)度中心項目:xxl-job-admin
作用:統(tǒng)一管理任務(wù)調(diào)度平臺上調(diào)度任務(wù)网梢,負(fù)責(zé)觸發(fā)調(diào)度執(zhí)行活烙,并且提供任務(wù)管理平臺回懦。

3.1.1 配置文件

所在路徑:/xxl-job/xxl-job-admin/src/main/resources/application.properties

### 調(diào)度中心JDBC鏈接:鏈接地址請保持和 2.1章節(jié) 所創(chuàng)建的調(diào)度數(shù)據(jù)庫的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 報警郵箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### 調(diào)度中心通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=
### 調(diào)度中心國際化配置 [必填]: 默認(rèn)為 "zh_CN"/中文簡體, 可選范圍為 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文;
xxl.job.i18n=zh_CN
## 調(diào)度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 調(diào)度中心日志表數(shù)據(jù)保存天數(shù) [必填]:過期日志自動清理幔摸;限制大于等于7時生效,否則, 如-1援所,關(guān)閉自動清理功能摊求;
xxl.job.logretentiondays=30
3.1.2 啟動

調(diào)度中心訪問地址:ip:端口號/項目名
默認(rèn)登錄賬號/密碼: admin/123456
登錄之后頁面如下所示:


任務(wù)調(diào)度中心

3.2 配置部署“執(zhí)行器項目”

“執(zhí)行器”項目:xxl-job-executor-sample-springboot (提供多種版本執(zhí)行器供選擇,現(xiàn)以 springboot 版本為例弹澎,可直接使用,也可以參考其并將現(xiàn)有項目改造成執(zhí)行器)
作用:負(fù)責(zé)接收“調(diào)度中心”的調(diào)度并執(zhí)行竿屹;可直接部署執(zhí)行器,也可以將執(zhí)行器集成到現(xiàn)有業(yè)務(wù)項目中夯膀。

3.2.1 xxl-job-core的maven依賴
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>${最新穩(wěn)定版本}</version>
</dependency>
3.2.2 配置文件

所在路徑:/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

### 調(diào)度中心部署跟地址 [選填]:如調(diào)度中心集群部署存在多個地址則用逗號分隔格仲。執(zhí)行器將會使用該地址進(jìn)行"執(zhí)行器心跳注冊"和"任務(wù)結(jié)果回調(diào)"圈盔;為空則關(guān)閉自動注冊掸冤;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 執(zhí)行器通訊TOKEN [選填]:非空時啟用友雳;
xxl.job.accessToken=
### 執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù)稿湿;為空則關(guān)閉自動注冊
xxl.job.executor.appname=xxl-job-executor-sample
### 執(zhí)行器注冊 [選填]:優(yōu)先使用該配置作為注冊地址,為空時使用內(nèi)嵌服務(wù) ”IP:PORT“ 作為注冊地址押赊。從而更靈活的支持容器類型執(zhí)行器動態(tài)IP和動態(tài)映射端口問題饺藤。
xxl.job.executor.address=
### 執(zhí)行器IP [選填]:默認(rèn)為空表示自動獲取IP,多網(wǎng)卡時可手動設(shè)置指定IP,該IP不會綁定Host僅作為通訊實用涕俗;地址信息用于 "執(zhí)行器注冊" 和 "調(diào)度中心請求并觸發(fā)任務(wù)"罗丰;
xxl.job.executor.ip=
### 執(zhí)行器端口號 [選填]:小于等于0則自動獲取再姑;默認(rèn)端口為9999萌抵,單機部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口元镀;
xxl.job.executor.port=9999
### 執(zhí)行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權(quán)限绍填;為空則使用默認(rèn)路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 執(zhí)行器日志文件保存天數(shù) [選填] : 過期日志自動清理, 限制值大于等于3時生效; 否則, 如-1, 關(guān)閉自動清理功能栖疑;
xxl.job.executor.logretentiondays=30
3.2.3 啟動

修改好配置文件之后讨永,直接運行,在“任務(wù)調(diào)度中心”中的“執(zhí)行器管理”頁面新增執(zhí)行器蔽挠,其中AppName對應(yīng)配置文件中的xxl.job.executor.appname=住闯,名稱自定義,注冊方式(自動注冊可以自動獲取對應(yīng)AppNameip:port澳淑,也可以手動錄入執(zhí)行器地址)

新增執(zhí)行器

執(zhí)行器管理

3.3 新建任務(wù)

  • 在“執(zhí)行器項目”中新建一個java類文件,使用@Component注解實現(xiàn)"bean注入"插佛;
  • 在類文件中新建個方法杠巡,使用@XxlJob(value = "")注解聲明定時任務(wù),其中value的值對應(yīng)任務(wù)配置中的JobHandler
    代碼范例:
@Component
public class MyXxlJobDemo {
    @XxlJob("demoJobHandler")
    public void demoJobHandler() {
        /**定時任務(wù)具體實現(xiàn)**/
    }
}
任務(wù)管理列表

新增任務(wù)
  • 注:配置屬性詳細(xì)說明
基礎(chǔ)配置:
    - 執(zhí)行器:任務(wù)的綁定的執(zhí)行器雇寇,任務(wù)觸發(fā)調(diào)度時將會自動發(fā)現(xiàn)注冊成功的執(zhí)行器, 實現(xiàn)任務(wù)自動發(fā)現(xiàn)功能; 另一方面也可以方便的進(jìn)行任務(wù)分組氢拥。每個任務(wù)必須綁定一個執(zhí)行器, 可在 "執(zhí)行器管理" 進(jìn)行設(shè)置;
    - 任務(wù)描述:任務(wù)的描述信息,便于任務(wù)管理锨侯;
    - 負(fù)責(zé)人:任務(wù)的負(fù)責(zé)人嫩海;
    - 報警郵件:任務(wù)調(diào)度失敗時郵件通知的郵箱地址,支持配置多郵箱地址囚痴,配置多個郵箱地址時用逗號分隔叁怪;
觸發(fā)配置:
    - 調(diào)度類型:
        無:該類型不會主動觸發(fā)調(diào)度;
        CRON:該類型將會通過CRON深滚,觸發(fā)任務(wù)調(diào)度奕谭;
        固定速度:該類型將會以固定速度,觸發(fā)任務(wù)調(diào)度痴荐;按照固定的間隔時間血柳,周期性觸發(fā);
        固定延遲:該類型將會以固定延遲生兆,觸發(fā)任務(wù)調(diào)度难捌;按照固定的延遲時間,從上次調(diào)度結(jié)束后開始計算延遲時間,到達(dá)延遲時間后觸發(fā)下次調(diào)度根吁;
    - CRON:觸發(fā)任務(wù)執(zhí)行的Cron表達(dá)式员淫;
    - 固定速度:固件速度的時間間隔,單位為秒婴栽;
    - 固定延遲:固件延遲的時間間隔满粗,單位為秒;
任務(wù)配置:
    - 運行模式:
        BEAN模式:任務(wù)以JobHandler方式維護(hù)在執(zhí)行器端愚争;需要結(jié)合 "JobHandler" 屬性匹配執(zhí)行器中任務(wù)映皆;
        GLUE模式(Java):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實際上是一段繼承自IJobHandler的Java類代碼并 "groovy" 源碼方式維護(hù)轰枝,它在執(zhí)行器項目中運行捅彻,可使用@Resource/@Autowire注入執(zhí)行器里中的其他服務(wù);
        GLUE模式(Shell):任務(wù)以源碼方式維護(hù)在調(diào)度中心鞍陨;該模式的任務(wù)實際上是一段 "shell" 腳本步淹;
        GLUE模式(Python):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實際上是一段 "python" 腳本诚撵;
        GLUE模式(PHP):任務(wù)以源碼方式維護(hù)在調(diào)度中心缭裆;該模式的任務(wù)實際上是一段 "php" 腳本;
        GLUE模式(NodeJS):任務(wù)以源碼方式維護(hù)在調(diào)度中心寿烟;該模式的任務(wù)實際上是一段 "nodejs" 腳本澈驼;
        GLUE模式(PowerShell):任務(wù)以源碼方式維護(hù)在調(diào)度中心;該模式的任務(wù)實際上是一段 "PowerShell" 腳本筛武;
    - JobHandler:運行模式為 "BEAN模式" 時生效缝其,對應(yīng)執(zhí)行器中新開發(fā)的JobHandler類“@JobHandler”注解自定義的value值;
    - 執(zhí)行參數(shù):任務(wù)執(zhí)行所需的參數(shù)徘六;     
高級配置:
    - 路由策略:當(dāng)執(zhí)行器集群部署時内边,提供豐富的路由策略,包括待锈;
        FIRST(第一個):固定選擇第一個機器漠其;
        LAST(最后一個):固定選擇最后一個機器;
        ROUND(輪詢):炉擅;
        RANDOM(隨機):隨機選擇在線的機器辉懒;
        CONSISTENT_HASH(一致性HASH):每個任務(wù)按照Hash算法固定選擇某一臺機器,且所有任務(wù)均勻散列在不同機器上谍失。
        LEAST_FREQUENTLY_USED(最不經(jīng)常使用):使用頻率最低的機器優(yōu)先被選舉眶俩;
        LEAST_RECENTLY_USED(最近最久未使用):最久未使用的機器優(yōu)先被選舉;
        FAILOVER(故障轉(zhuǎn)移):按照順序依次進(jìn)行心跳檢測快鱼,第一個心跳檢測成功的機器選定為目標(biāo)執(zhí)行器并發(fā)起調(diào)度颠印;
        BUSYOVER(忙碌轉(zhuǎn)移):按照順序依次進(jìn)行空閑檢測纲岭,第一個空閑檢測成功的機器選定為目標(biāo)執(zhí)行器并發(fā)起調(diào)度;
        SHARDING_BROADCAST(分片廣播):廣播觸發(fā)對應(yīng)集群中所有機器執(zhí)行一次任務(wù)线罕,同時系統(tǒng)自動傳遞分片參數(shù)止潮;可根據(jù)分片參數(shù)開發(fā)分片任務(wù);
    - 子任務(wù):每個任務(wù)都擁有一個唯一的任務(wù)ID(任務(wù)ID可以從任務(wù)列表獲取)钞楼,當(dāng)本任務(wù)執(zhí)行結(jié)束并且執(zhí)行成功時喇闸,將會觸發(fā)子任務(wù)ID所對應(yīng)的任務(wù)的一次主動調(diào)度。
    - 調(diào)度過期策略:
        - 忽略:調(diào)度過期后询件,忽略過期的任務(wù)燃乍,從當(dāng)前時間開始重新計算下次觸發(fā)時間;
        - 立即執(zhí)行一次:調(diào)度過期后宛琅,立即執(zhí)行一次刻蟹,并從當(dāng)前時間開始重新計算下次觸發(fā)時間;
    - 阻塞處理策略:調(diào)度過于密集執(zhí)行器來不及處理時的處理策略嘿辟;
        單機串行(默認(rèn)):調(diào)度請求進(jìn)入單機執(zhí)行器后舆瘪,調(diào)度請求進(jìn)入FIFO隊列并以串行方式運行;
        丟棄后續(xù)調(diào)度:調(diào)度請求進(jìn)入單機執(zhí)行器后红伦,發(fā)現(xiàn)執(zhí)行器存在運行的調(diào)度任務(wù)英古,本次請求將會被丟棄并標(biāo)記為失敗昙读;
        覆蓋之前調(diào)度:調(diào)度請求進(jìn)入單機執(zhí)行器后哺呜,發(fā)現(xiàn)執(zhí)行器存在運行的調(diào)度任務(wù),將會終止運行中的調(diào)度任務(wù)并清空隊列箕戳,然后運行本地調(diào)度任務(wù);
    - 任務(wù)超時時間:支持自定義任務(wù)超時時間国撵,任務(wù)運行超時將會主動中斷任務(wù)陵吸;
    - 失敗重試次數(shù);支持自定義任務(wù)失敗重試次數(shù)介牙,當(dāng)任務(wù)失敗時將會按照預(yù)設(shè)的失敗重試次數(shù)主動進(jìn)行重試壮虫;

記遇到的問題: XXL-JOB配置遷移到Nacos Could not resolve placeholder ‘xxl.job.accessToken’ in value “${xxl.job.accessToke}
解決辦法:對配置項中的空值加雙引號("")

xxl:
  job: 
    admin: 
      addresses: http://127.0.0.1:8080/xxl-job-admin
    accessToken: ""
    executor: 
      appname: xxl-job-executor-sample
      address: ""
      ip: ""
      port: 9999
      logpath: ./log
      logretentiondays: 1

4. 實際應(yīng)用

  • 手動觸發(fā)定時任務(wù),Java代碼接收"任務(wù)參數(shù)"
String jobParam = XxlJobHelper.getJobParam();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末环础,一起剝皮案震驚了整個濱河市囚似,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌线得,老刑警劉巖饶唤,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贯钩,居然都是意外死亡募狂,警方通過查閱死者的電腦和手機办素,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祸穷,“玉大人性穿,你說我怎么就攤上這事±坠觯” “怎么了需曾?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祈远。 經(jīng)常有香客問我呆万,道長,這世上最難降的妖魔是什么绊含? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任桑嘶,我火速辦了婚禮,結(jié)果婚禮上躬充,老公的妹妹穿的比我還像新娘逃顶。我一直安慰自己,他們只是感情好充甚,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布以政。 她就那樣靜靜地躺著,像睡著了一般伴找。 火紅的嫁衣襯著肌膚如雪盈蛮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天技矮,我揣著相機與錄音抖誉,去河邊找鬼。 笑死衰倦,一個胖子當(dāng)著我的面吹牛袒炉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播樊零,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼我磁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驻襟?” 一聲冷哼從身側(cè)響起夺艰,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沉衣,沒想到半個月后郁副,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡厢蒜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年霞势,在試婚紗的時候發(fā)現(xiàn)自己被綠了烹植。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡愕贡,死狀恐怖草雕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情固以,我是刑警寧澤墩虹,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站憨琳,受9級特大地震影響诫钓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜篙螟,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一菌湃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遍略,春花似錦惧所、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕾久,卻和暖如春势似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僧著。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工履因, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盹愚。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓搓逾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杯拐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容