SpringBoot集成系列--xxlJob

文章目錄

  • 一、搭建調度中心xxl-job-admin
    • 1、下載項目
    • 2、調整項目參數
    • 3、執行初始化數據庫SQL
    • 4、啟動項目
    • 5、訪問
  • 二、集成步驟
    • 1、添加xxl-job的依賴
    • 2、添加xxl-job的依賴
    • 3、配置執行器
    • 4、創建執行器
    • 5、開發任務
      • 1)方式1:BEAN模式(方法形式)
      • 2)方式2:GLUE模式(Java)
    • 6、測試
  • 三、總結

一、搭建調度中心xxl-job-admin

1、下載項目

https://gitee.com/xuxueli0323/xxl-job

2、調整項目參數

端口號沖突,修改端口號,數據庫密碼不一樣,改為你的密碼
在這里插入圖片描述

3、執行初始化數據庫SQL

在這里插入圖片描述

4、啟動項目

把項目打包成jar包,使用java -jar命令啟動

5、訪問

訪問http://localhost:8087/xxl-job-admin,輸入用戶名:admin,密碼:123456,這個是默認初始化的用戶名和密碼,登錄成功
在這里插入圖片描述

二、集成步驟

1、添加xxl-job的依賴

引入依賴到pom.xml

<!-- Xxl-Job -->
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.0</version>
</dependency>

2、添加xxl-job的依賴

在application.properties添加xxl-job的配置

### 調度中心部署根地址 [選填]:如調度中心集群部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳注冊""任務結果回調";為空則關閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8087/xxl-job-admin
### 執行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=default_token
### 執行器AppName [選填]:執行器心跳注冊分組依據;為空則關閉自動注冊
xxl.job.executor.appname=xxl-job-executor-forlan
### 執行器注冊 [選填]:優先使用該配置作為注冊地址,為空時使用內嵌服務 ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執行器動態IP和動態映射端口問題。
xxl.job.executor.address=
### 執行器IP [選填]:默認為空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執行器注冊""調度中心請求并觸發任務";
xxl.job.executor.ip=
### 執行器端口號 [選填]:小于等于0則自動獲取;默認端口為9999,單機部署多個執行器時,注意要配置不同執行器端口;
xxl.job.executor.port=9999
### 執行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權限;為空則使用默認路徑;
xxl.job.executor.logpath=D:/data/applogs/xxl-job/jobhandler
### 執行器日志文件保存天數 [選填] : 過期日志自動清理, 限制值大于等于3時生效; 否則,-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30

3、配置執行器

初始化并配置xxl-job的執行器,將其集成到Spring Boot應用中。

@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}
}

4、創建執行器

登錄調度中心,選擇執行器管理菜單,新增一個執行器
在這里插入圖片描述
AppName就是我們之前配置的application.properties中的xxl.job.executor.appname

到這里已經全部配置完畢,接下來開發我們的任務即可

5、開發任務

1)方式1:BEAN模式(方法形式)

需要新增XxlJobHandler類,每個任務需要開發一個方法,并添加"@XxlJob"注解,如下

package cn.forlan.job;import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;@Component
public class MyXxlJobHandler {@XxlJob("myXxlJobHandler")public void execute() throws Exception {// 任務執行邏輯System.out.println("MyXxlJobHandler is running.");XxlJobHelper.log("MyXxlJobHandler is running.");}
}

選擇任務管理菜單,新增任務,JobHandler填寫上myXxlJobHandler,填完所有信息,保存即可
在這里插入圖片描述

2)方式2:GLUE模式(Java)

直接在調度中心,新建調度任務,運行模式選中 “GLUE模式(Java)”
在這里插入圖片描述
選中指定任務,點擊該任務右側“GLUE”按鈕,將會前往GLUE任務的Web IDE界面
在這里插入圖片描述
編寫我們的代碼,保存即可
在這里插入圖片描述

6、測試

選擇執行一次,就可以看到成功執行
在這里插入圖片描述
查看日志,就可以看到我們的執行情況
在這里插入圖片描述
在這里插入圖片描述

三、總結

xxl-job包括調度中心和執行器兩個主要部分,調度中心負責管理調度信息,按照調度配置發出調度請求,執行器負責接收調度請求并執行對應的JobHandler中業務邏輯。通過這種方式,“調度”和“任務”兩部分可以相互解耦,提高系統整體穩定性和擴展性。

大概原理如下:

  • 任務注冊:任務的注冊是通過在xxl-job-admin管理平臺上配置任務信息,包括任務名稱、執行器地址、任務參數等。
  • 任務調度:xxl-job-admin管理平臺會根據任務的配置信息,將任務調度信息寫入數據庫。調度中心會定時掃描數據庫,根據任務的調度策略和觸發器條件,選擇合適的執行器節點進行任務調度。
  • 任務執行:執行器節點會定時向調度中心發送心跳請求,獲取待執行的任務。調度中心根據任務的調度策略,將任務分配給執行器節點。執行器節點接收到任務后,根據任務的類型和參數進行任務的執行。
  • 任務監控:xxl-job提供了任務監控功能,可以查看任務的執行情況、日志和統計信息。執行器節點會將任務的執行情況和日志信息上報給調度中心,調度中心將這些信息存儲在數據庫中,供用戶查看。

通過以上功能,xxl-job實現了分布式任務的調度和執行,提供了可靠、高效的任務調度解決方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213832.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RocketMQ源碼

RocketMQ的核心三流程 啟動流程 RocketMQ服務端由兩部分組成NameServer和Broker&#xff0c;NameServer是服務的注冊中心&#xff0c;Broker會把自己的地址注冊到NameServer&#xff0c;生產者和消費者啟動的時候會先從NameServer獲取Broker的地址&#xff0c;再去從Broker發…

【自動駕駛】2023年度盤點:智能汽車、自動駕駛、車聯網必讀書

2023年&#xff0c;智能駕駛和新能源汽車行業仍然有著肉眼可見的新進展。自動駕駛技術繼續嘗試從輔助駕駛向自動駕駛的過渡&#xff0c;更重要的是相關技術成本的下降。根據《全球電動汽車展望2023》等行業報告&#xff0c;預計2023年平均成本將降至100美元/千瓦時以下&#xf…

知識筆記(四十八)———mysql的優缺點

MySQL作為一個廣泛應用的關系型數據庫管理系統&#xff0c;具有以下優點和缺點&#xff1a; 優點&#xff1a; 開源和免費&#xff1a;MySQL是開源軟件&#xff0c;用戶可以免費獲取和使用它。這使得MySQL成為個人開發者和小型組織的理想選擇。 良好的性能&#xff1a;MySQL經…

成都工業學院Web技術基礎(WEB)實驗八:BOM、DOM基本操作

寫在前面 1、基于2022級計算機大類實驗指導書 2、代碼僅提供參考&#xff0c;前端變化比較大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一樣 3、圖片和文字僅為示例&#xff0c;需要自行替換 4、如果代碼不滿足你的要求&#xff0c;請尋求其他的…

【開源】基于Vue.js的就醫保險管理系統

文末獲取源碼&#xff0c;項目編號&#xff1a; S 085 。 \color{red}{文末獲取源碼&#xff0c;項目編號&#xff1a;S085。} 文末獲取源碼&#xff0c;項目編號&#xff1a;S085。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 科室檔案模塊2.2 醫生檔案模塊2.3 預…

最好的貓罐頭品牌有哪些?精選的5款口碑好的貓罐頭推薦!

對于一個剛入門的養貓小白來說&#xff0c;面對市面上琳瑯滿目的貓罐頭選擇確實讓人頭大。我們總想選到營養價值高的罐頭&#xff0c;但又怕貓咪不喜歡吃&#xff0c;也擔心選到不安全的產品。 最好的貓罐頭品牌有哪些&#xff1f;根據我開寵物店7年的經驗&#xff0c;今天我將…

Java基礎——static關鍵字

對象只有在new的時候才會分配空間&#xff0c;有時候我們希望不管是否產生了對象或無論產生了多少對象的情況下&#xff0c;某些特定的數據在內存空間里只有一份&#xff0c;就可以static修飾成員&#xff0c;也稱靜態成員或類成員。 static可修飾屬性、方法、代碼塊、內部類。…

python一點通:參數列表里面有星號 * 什么意思?

在Python類或函數參數列表中&#xff0c;我們有時會看到星號*&#xff0c;它是什么意思呢&#xff1f; 什么是僅限關鍵字參數&#xff1f; Python 3中引入的僅限關鍵字參數是指必須通過其名稱來指定的函數或方法參數。它們避免了由于存在多個參數而引起的混淆&#xff0c;增強…

「哈士奇贈書活動 - 46期」-『技術人修煉之道:從程序員到百萬高管的72項技能(第2版)』

?? 贈書 - 《技術人修煉之道&#xff08;第2版&#xff09;》 ?? 內容簡介 本書旨在幫助計算機IT技術人員提升職場核心技能、架構思維、團隊管理能力、商業認知&#xff0c;讓每一位普通的技術從業者&#xff0c;修煉成為"技術職場超級個體”&#xff0c;通過全面升級…

IntelliJ IDEA無公網遠程連接Windows本地Mysql數據庫提高開發效率

&#x1f525;博客主頁&#xff1a; 小羊失眠啦. &#x1f3a5;系列專欄&#xff1a;《C語言》 《數據結構》 《Linux》《Cpolar》 ??感謝大家點贊&#x1f44d;收藏?評論?? 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;…

windows啟動出現 zookeeper此處不應有java

可能是Java 路徑出了問題&#xff0c;這個programFiles直接有空格&#xff0c;沒錯就有空格&#xff0c;筆者一開始以為這么點算什么空格&#xff0c;需要把這個對應的Java文件到別的英文路徑下&#xff0c;并且修改環境變量。就可以啟動的。 還可以啟動方式有很多種&#xff0…

2.2 模型基礎

建模流程 作業 這次搞了10天左右終于把作業做完了。 先是去學習了下如何建模->然后將模型導入Substance Painter里繪制貼圖->最后導入到unity中&#xff08;雖然最后效果很差&#xff09;&#xff0c;但是回過頭來看整個過程學習到了次時代美術的工作流&#xff0c;思考…

658. 找到 K 個最接近的元素

658. 找到 K 個最接近的元素 Java代碼&#xff1a;滑窗 class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> list new ArrayList<>();for (int i 0; i < arr.length; i) {arr[i] arr[i] - x;}for(i…

【打卡】牛客網:BM63 跳臺階

自己寫的 class Solution { public:/*** 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回方法規定的值即可** * param number int整型 * return int整型*/int jumpFloor(int number) {// write code hereif(number 1)return 1;if(number 2)r…

簡單實現Spring容器(二) 封裝BeanDefinition對象放入Map

階段2: // 1.編寫自己的Spring容器,實現掃描包,得到bean的class對象.2.掃描將 bean 信息封裝到 BeanDefinition對象,并放入到Map.思路: 1.將 bean 信息封裝到 BeanDefinition對象中,再將其放入到BeanDefinitionMap集合中,集合的結構大概是 key[beanName]–value[beanDefintion…

MySQL行鎖范圍分析(行鎖、間隙鎖、臨鍵鎖)

MySQL 中鎖的概念 排它鎖&#xff08;Exclusive Lock&#xff09; X 鎖&#xff0c;也稱為寫鎖&#xff0c;若事務T對對象A加上X鎖&#xff0c;則只允許T讀取和修改A&#xff0c;其他任何事物都不能再對A 加任何鎖&#xff0c;直到T釋放A上的鎖。 SELECT…FOR UPDATE 對讀取的…

風控之Android設備指紋技術

標識性參數——Android ID、IMEI、OAID非標識性參數 非標識性參數——手機運營商 1 設備指紋 簡單來講&#xff0c;設備指紋是指用于標識出該設備的設備特征。可以是單一設備特征&#xff0c;也可以是多種設備特征的組合&#xff0c;以方便風控系統對設備的唯一性進行識別。…

產品入門第一講:Axure的安裝以及基本使用

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一個在CSDN分享筆記的博主。&#x1f4da;&#x1f4da; ??? &#x1f31f;在這里&#xff0c;我要推薦給大家我的專欄《Axure》。&#x1f3af;&#x1f3af; &#x1f680;無論你是編程小白&#xff0c;還是有…

未來教師行業發展前景

親愛的老師們&#xff0c;你是否對未來教師行業的發展前景感到好奇和期待&#xff1f;作為一名老師&#xff0c;我深知教育行業的重要性和挑戰&#xff0c;但同時也看到了其中蘊含的巨大機遇。 一、技術融合與在線教育 技術的飛速發展正在改變著教育的面貌。在線教育平臺的崛起…

算法基礎十一

組合 給定兩個整數 n 和 k&#xff0c;返回范圍 [1, n] 中所有可能的 k 個數的組合。 示例 1&#xff1a; 輸入&#xff1a;n 4, k 2 輸出&#xff1a; [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2&#xff1a; 輸入&#xff1a;n 1, k 1 輸出&#xff1a;[[1]…