自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SpringBoot與XXL-JOB高效定時任務管理指南

開發(fā) 前端
本文將帶領你探索如何將這兩者集成在一起,實現(xiàn)高效的定時任務管理。無論你是初學者還是有經(jīng)驗的開發(fā)者,本文都將提供你所需要的知識,讓你輕松掌握這一技術。讓我們開始吧!

前言

在現(xiàn)代應用程序中,定時任務是不可或缺的一部分。Spring Boot 和 XXL-Job 為你提供了一個強大的工具組合,以簡化任務調度和管理。

本文將帶領你探索如何將這兩者集成在一起,實現(xiàn)高效的定時任務管理。無論你是初學者還是有經(jīng)驗的開發(fā)者,本文都將提供你所需要的知識,讓你輕松掌握這一技術。讓我們開始吧!

一、XXL-Job簡介

什么是XXL-job

官網(wǎng)地址:https://www.xuxueli.com/xxl-job/

XXL-Job是一個開源的分布式任務調度平臺,主要用于解決大規(guī)模分布式系統(tǒng)中的任務調度和管理問題。下面是XXL-Job的簡介,重點強調其分布式任務調度的特點:

XXL-Job簡介:

XXL-Job是一個基于Java開發(fā)的分布式任務調度平臺,旨在幫助開發(fā)者和運維人員管理和調度任務,特別適用于大規(guī)模分布式應用。它提供了直觀的Web界面,易于配置和監(jiān)控各種類型的任務。

XXL-Job的關鍵特點包括:

  1. 分布式任務調度: XXL-Job支持分布式任務調度,可以輕松處理任務分布在不同節(jié)點的情況。這對于大型微服務架構和集群環(huán)境非常有用。
  2. 彈性擴展: XXL-Job支持彈性擴展,你可以隨時增加或減少執(zhí)行器節(jié)點,以適應不同負載和任務需求。這確保了高可用性和性能。
  3. 任務調度中心: XXL-Job提供了一個任務調度中心,可以集中管理和監(jiān)控任務。你可以在Web界面上創(chuàng)建、編輯、刪除任務,查看任務日志和統(tǒng)計信息。
  4. 多種任務類型: 支持多種任務類型,包括簡單的定時任務、Bean調用、Shell腳本、HTTP任務、GLUE任務(動態(tài)語言任務),滿足各種任務需求。
  5. 任務依賴和失敗重試: XXL-Job允許你配置任務之間的依賴關系,確保任務按照指定的順序執(zhí)行。同時,它支持失敗重試機制,確保任務在失敗時能夠重新執(zhí)行。
  6. 報警和日志: 提供了報警機制,可以通過郵件、短信等方式通知任務執(zhí)行結果。任務執(zhí)行日志也可以在Web界面中查看,便于故障排查和監(jiān)控。
  7. 開源和社區(qū)支持: XXL-Job是開源項目,擁有活躍的社區(qū)支持和持續(xù)的更新。你可以根據(jù)自己的需求進行定制和擴展。

XXL-Job的分布式任務調度特點使其成為處理大規(guī)模、復雜任務調度需求的強大工具。它可以幫助開發(fā)團隊更好地管理任務,提高系統(tǒng)的可靠性和可維護性,同時降低了任務調度的復雜性。

對比別的任務調度

XXL-Job在分布式任務調度領域有其獨特之處,下面是它與其他一些任務調度解決方案的比較,以突出其優(yōu)勢和特點:

Quartz:

  • Quartz是一個強大的Java任務調度框架,但通常需要額外的配置和管理來支持分布式環(huán)境。XXL-Job提供了更易于配置和管理的分布式任務調度方案。
  • XXL-Job的Web界面和報警機制更加現(xiàn)代化,便于任務管理和監(jiān)控。

Spring的@Scheduled:

  • Spring的@Scheduled注解適用于單節(jié)點應用程序,而XXL-Job專門設計用于分布式任務調度,支持在多個節(jié)點上執(zhí)行任務。
  • XXL-Job提供了任務依賴和失敗重試的機制,以處理復雜任務流程。

Elastic Job:

  • Elastic Job是另一個分布式任務調度框架,但XXL-Job更注重任務的可視化管理,提供了直觀的Web界面。
  • XXL-Job的報警機制更加豐富,能夠及時通知任務執(zhí)行結果。

Akka Scheduler:

  • Akka是一個并發(fā)編程庫,它提供了定時任務功能,但相對更加復雜。XXL-Job更適合那些希望通過Web界面輕松管理任務的團隊。
  • XXL-Job的彈性擴展特性使其適用于大規(guī)模分布式系統(tǒng)。

Cron4J:

  • Cron4J是一個輕量級的Java定時任務庫,適用于簡單任務。XXL-Job提供了更多高級功能,如任務依賴、失敗重試和任務監(jiān)控。

總體而言,XXL-Job在分布式任務調度方面的優(yōu)勢在于其易用性、可視化管理、分布式支持、任務依賴和報警機制。它是一個強大的工具,特別適合需要大規(guī)模任務調度和監(jiān)控的應用程序。

然而,具體選擇取決于項目需求,一些輕量級的解決方案可能在小型應用中更加合適。

二、springboot整合XXL-job

配置XXL-Job Admin

拉取XXL-Job代碼

  • 【gitee】

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

  • 【github】

https://github.com/xuxueli/xxl-job/

上面的github和gitee都可以選擇,然后拉取下來

修改拉取的配置

1.執(zhí)行拉取下來的sql:/xxl-job/doc/db/tables_xxl_job.sql

2.修改調度中心配置/xxl-job/xxl-job-admin/src/main/resources/application.properties

### web,端口,這里我修改了,默認是8080
server.port=9998
# 修改連接數(shù)據(jù)庫配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3361/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

### xxl-job, access token,注意這里的accessToken在執(zhí)行器中也需要配置(一致)
xxl.job.accessToken=eyJhbGciOiJIUzI1NiJ9

3.修改/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml,否則可能會報錯

<!-- 這里需要修改的值如下,不然會找不到日志路徑-->
<property name="log.path" value="./logs/xxl-job-admin.log"/>

4.訪問http://127.0.0.1:9998/xxl-job-admin,這里端口是你上面配置的,輸入默認的賬號密碼admin/123456

圖片圖片

到這里調度中心就配置好了

配置執(zhí)行器

這里其實剛剛拉取的項目下就涵蓋了執(zhí)行器,包括無框架的以及springboot框架的

圖片圖片

自己的項目如何整合

maven依賴

<dependency>
  <groupId>com.xuxueli</groupId>
  <artifactId>xxl-job-core</artifactId>
  <version>2.4.0</version>
</dependency>

properties文件配置

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

執(zhí)行器組件配置

package com.todoitbo.baseSpringbootDasmart.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@Slf4j
public class XxlJobConfig {

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accesstoken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;

    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        log.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
}

jobhandler配置

package com.todoitbo.baseSpringbootDasmart.handler;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;


@Component
public class JobHandler {

    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
    }
}

拉取下來的代碼中/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java是更詳細的配置

實現(xiàn)效果

1.啟動項目,出現(xiàn)如下即成功。

圖片

2.任務調度頁面中加入執(zhí)行器。

圖片圖片

3.配置任務。

圖片圖片

4.啟動任務。

??:這里如果你要執(zhí)行一次的話,機器地址一定是帶http的,比如http://127.0.0.1:9999

如果是啟動的話,先點擊注冊節(jié)點,再啟動即可

三、@XxlJob中參數(shù)詳解

以下是這三個參數(shù)的詳細說明:

  • value:
  • 參數(shù)類型: String
  • 說明: 任務的名字,必須是唯一的。在XXL-Job Admin中配置任務時,這個值用于標識任務。
  • init:
  • 參數(shù)類型: String
  • 說明: 任務初始化時的方法名。這個方法會在任務第一次執(zhí)行前被調用,通常用于初始化一些資源。方法必須是無參數(shù)的。
  • destroy:
  • 參數(shù)類型: String
  • 說明: 任務銷毀時的方法名。這個方法會在任務最后一次執(zhí)行后被調用,通常用于釋放資源。方法必須是無參數(shù)的。

這三個參數(shù)是@XxlJob注解的基本參數(shù),用于定義任務的基本屬性。

四、最佳實踐

使用Spring Boot和XXL-Job進行任務調度是一種強大的方式,但也有一些常見的錯誤和最佳實踐,以下是一些建議,幫助讀者避免這些錯誤并在實際項目中取得成功:

詳細記錄任務日志:記錄任務的執(zhí)行日志是非常重要的,它可以幫助你追蹤任務的執(zhí)行情況,及時發(fā)現(xiàn)問題。確保在任務Handler中添加詳細的日志信息。

  • 參數(shù)校驗: 在任務Handler中對傳遞的參數(shù)進行合法性校驗,以避免不必要的異常和錯誤。
  • 任務冪等性: 確保任務的邏輯是冪等的,即多次執(zhí)行不會產(chǎn)生不同的結果。這對于任務失敗后的重試非常重要。
  • 失敗處理: 配置任務的失敗處理策略,包括重試次數(shù)、重試間隔等。這可以幫助應對臨時問題,如網(wǎng)絡故障或資源不足。
  • 任務依賴: 如果任務之間存在依賴關系,確保在XXL-Job Admin中正確配置任務的依賴關系,以保證任務按照正確的順序執(zhí)行。
  • 動態(tài)調度: 利用XXL-Job的動態(tài)調度功能來應對實時需求的變化,如動態(tài)調整任務觸發(fā)時間、任務取消、任務延遲等。
  • 監(jiān)控與報警: 集成監(jiān)控和報警系統(tǒng),可以幫助你實時監(jiān)測任務的執(zhí)行情況,及時發(fā)現(xiàn)問題并采取措施。XXL-Job提供了與監(jiān)控系統(tǒng)的集成支持。
  • 版本管理: 使用版本控制工具(如Git)來管理任務Handler代碼,以便跟蹤任務邏輯的變化和恢復歷史版本。
  • 測試任務邏輯: 在開發(fā)任務Handler時進行充分的單元測試,確保任務邏輯的正確性。XXL-Job提供了一些測試工具,如JobLogger。
  • 集群部署: 如果需要,部署XXL-Job執(zhí)行器節(jié)點以提高任務的可用性和負載均衡。
  • 版本升級: 定期關注XXL-Job的更新版本,確保使用最新的穩(wěn)定版本,以獲得最新的功能和 bug 修復。
  • 安全性: 保護XXL-Job Admin的訪問權限,防止未經(jīng)授權的訪問。不要在任務邏輯中存儲敏感信息。
  • 文檔和培訓: 提供適當?shù)奈臋n和培訓,以便項目團隊了解如何使用XXL-Job和任務調度最佳實踐。

遵循這些最佳實踐可以幫助你更好地使用Spring Boot和XXL-Job,確保任務調度系統(tǒng)的可靠性和穩(wěn)定性。這對于生產(chǎn)環(huán)境中的任務調度至關重要。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2023-01-04 09:23:58

2022-09-23 13:57:11

xxl-job任務調度中間件

2020-07-17 09:33:39

CPU內存調度

2024-08-27 09:34:24

2022-03-26 17:13:22

ElasticJobxxl-job分布式

2023-06-27 07:44:53

xxl-job分布式任務調度平臺

2023-11-16 09:30:27

系統(tǒng)任務

2024-07-31 08:18:40

2024-11-04 16:01:01

2022-01-27 08:44:58

調度系統(tǒng)開源

2023-11-07 07:56:40

2025-02-18 14:08:14

2022-12-29 08:32:50

xxl-job緩存Schedule

2023-11-30 22:06:43

2023-11-07 07:47:35

Topic線程PUSH

2017-03-13 09:12:00

TCP數(shù)據(jù)結構請求包

2024-07-31 14:03:00

Spring定時任務管理

2024-12-04 10:47:26

2019-11-12 09:32:39

分布式elastic-job分片

2021-12-26 19:07:51

MySQL存儲容器
點贊
收藏

51CTO技術棧公眾號