文章目錄
- 一、搭建調度中心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實現了分布式任務的調度和執行,提供了可靠、高效的任務調度解決方案。