一、前言
定時任務有很多種,有一些大的框架也有一些簡單的實作,
比如常見的:
- JDK的
Timer和TimerTask Quartz異步任務調度框架- 分布式定時任務
XXL-JOB - Spring Task注解
@Scheduled
小編也就知道這些,歡迎大佬補充哈!!
今天小編就以現在比較火的分布式定時任務xxl-job,優點比較輕量級,但是從21年到現在沒有比較大的更新!
現在最新的好像是2.4.0,
二、xxl-job介紹
XXL-JOB是一個分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展,現已開放源代碼并接入多家公司線上產品線,開箱即用,
它是美團大佬:許雪里開發出來的!
本篇以實踐教學為主,介紹大家感興趣可以去官方檔案去看看!
xxl-job檔案
總體架構圖:

大家自行拉去最新代碼即可:
專案地址
三、修改配置
1. 運行sql檔案

匯出到本地資料庫:

XXL-JOB調度模塊基于自研調度組件并支持集群部署,調度資料庫表說明如下:
- xxl_job_lock:任務調度鎖表;
- xxl_job_group:執行器資訊表,維護任務執行器資訊;
- xxl_job_info:調度擴展資訊表: 用于保存XXL-JOB調度任務的擴展資訊,如任務分組、任務名、機器地址、執行器、執行入參和報警郵件等等;
- xxl_job_log:調度日志表: 用于保存XXL-JOB任務調度的歷史資訊,如調度結果、執行結果、調度入參、調度機器和執行器等等;
- xxl_job_log_report:調度日志報表:用戶存盤XXL-JOB任務調度日志的報表,調度中心報表功能頁面會用到;
- xxl_job_logglue:任務GLUE日志:用于保存GLUE更新歷史,用于支持GLUE的版本回溯功能;
- xxl_job_registry:執行器注冊表,維護在線的執行器和調度中心機器地址資訊;
- xxl_job_user:系統用戶表;
2. 修改xxl-job-admin配置
小編修改了一下埠號:
server.port=8087
記得調整成自己的資料庫密碼:
spring.datasource.password=root
由于sql檔案匯入的直接是個資料庫,不需要我們在調整資料庫的名稱!
3. 需修改xxl-job-executor-sample-springboot配置
小編這里修改了埠號:
server.port=8086
第11行:修改為admin的埠
xxl.job.admin.addresses=http://127.0.0.1:8087/xxl-job-admin
第22行:小編9999埠被占用,修改了一下埠
xxl.job.executor.port=9998
4. 添加自己的定時任務
@XxlJob("testJobHandler")
public void testJobHandler() throws Exception {
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("這是第" + i + 1 + "條日志!");
System.out.println("這是第" + i + 1 + "次看到我了!");
}
System.out.println("定時任務結束!!");
}

四、運行專案
1. 啟動專案

2. 登錄
根據上一步的配置,我們直接埠號加服務名字進行訪問:
http://localhost:8087/xxl-job-admin/
賬號:admin
密碼:123456

3. xxl-job的好處
自己寫完的定時任務,可以交給這個管理,這樣什么時候運行,定時任務的執行規則,都可以在可視化的界面進行管理和操作,更加的人性化!可以動態的修改cron運算式,還有日志執行情況,這是真的香啊!!
4. 查看執行器獲取網址
默認已經把springboot整合上來了,如果大家是自己新建的模塊可以新增一條,讓管理器管理咱們自己專案的定時任務,也就是使用@XxlJob的任務!

5. 新增任務管理
這里比較智能,一些基本的cron運算式都可以幫你寫,非常的人性!!
JobHandler:填@XxlJob里面的名字即可,小編這里是:@XxlJob("testJobHandler"),所以是testJobHandler

6. 執行任務
我們這次執行一次,看看控制臺是否列印記錄,看看我們寫的任務是否執行了!!

任務引數隨便輸入,機器地址為:http://192.168.1.207:9998/,第4步查看的,也就是管理端的地址加埠!!

7. 執行成功
我們看到方法成功被執行了!!

8. 查看日志

五、總結
大家看到我的日志還是有執行失敗的,原因是開始埠被占用,沒有注意,一直在測驗,一直失敗!!
大家運行后一定看看控制臺有沒有報錯,如果是java.net.BindException: Address already in use: bind
那就是埠號被占用,換一個就行了!!
也可以看看小編這篇文章,詳細解決了這個問題!!
Address already in use: bind【已解決】
有緣人才可以看得到的哦!!!
點擊訪問!小編自己的網站,里面也是有很多好的文章哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501437.html
標籤:Java
上一篇:(有圖說人話)解決MyBatis:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
下一篇:Javaweb06-JDBC
