Spring Boot應用接入SchedulerX
本文介紹如何將Spring Boot應用接入阿里云的SchedulerX服務,指導您從創建應用入手,配置必要的接入參數,再到Spring Boot項目中進行客戶端的設置和驗證,確保您的應用順利運行在SchedulerX平臺上,實現任務的自動化調度和精準管理。
視頻演示
如需了解Spring Boot應用如何接入SchedulerX的步驟演示,請參見視頻演示。
前提條件
(可選)創建命名空間。當您的應用有較高的安全要求時,您可通過創建命名空間實現資源和服務的隔離,具體操作請參見創建命名空間。
已有SpringBoot項目。
方案概覽
將Spring Boot應用快速接入SchedulerX分為以下幾步:
創建應用:在阿里云SchedulerX中創建應用,獲取接入SchedulerX配置參數,并對任務進行統一管理和配置。
客戶端接入SchedulerX:在項目中的properties或者yml中,配置SchedulerxWorker所需要的參數并創建任務處理類,連接指定的SchedulerX應用。
結果驗證:確認SpringBoot應用接入成功并正常運行。
步驟一:創建應用
1.1基本配置
登錄分布式任務調度平臺,選擇地域。
在左側導航欄的應用管理頁面。選擇目標命名空間后,單擊創建應用。輸入應用名、應用ID并選擇應用類型,按需設計高級配置,單擊下一步。
重要注意在指定地域和命名空間,創建資源信息,確保資源信息準確性。
配置項
描述
默認值
應用名
自定義設置應用名稱。
無
應用ID
應用ID為應用接入的GroupID,保證同一個命名空間下唯一,否則將創建失敗,可以和應用名一致。
無
應用類型
普通應用:非K8s部署的應用,或者對K8s任務沒有需求。
K8s應用:應用通過K8s部署,并且有需求要使用K8s任務。
普通應用
版本
根據需求選擇版本。版本對比請參見產品版本對比。
專業版
日志服務
開啟后,增加一個Log4j或Logback的配置,即可在控制臺看到每次任務調度(包括分布式任務)的業務日志,方便排查問題。
關閉
load5
不能超過客戶端機器CPU可用核數
0
內存使用率
表示近5分鐘進程內存平均使用率不能大于該閾值,否則判斷客戶端機器繁忙。
90%
磁盤使用率
表示磁盤使用率不能大于該值,否則判斷客戶端機器不健康,狀態繁忙。
95%
是否觸發繁忙機器
機器繁忙時是否繼續觸發客戶端執行。
打開
高級配置
任務最大數量
一個分組最多支持的Job數量。
1000
自動擴容
選擇是否自動擴容。開啟時,需要設置全局任務數。
關閉
流控
選擇是否流控。開啟時,需要設置任務實例并發數。
關閉
日歷
您可在下拉列表中選擇在金融日或者工作日調度應用。
金融日:特指金融業務的交易日。
工作日:社會、組織或個人日常活動中正常工作和經營的日期。
0
1.2通知配置
在通知配置向導頁填寫相關信息,選擇通知渠道并設置聯系人。
通知渠道目前支持短信、郵件、Webhook和電話。
關于Webhook配置的詳細信息,請參見webhook配置說明。
通知聯系人支持聯系人組、聯系人兩種方式。
聯系人組
聯系人組下所有聯系人都可以接收到通知。關于創建聯系人組,請參見創建通知聯系人或通知聯系人組。
聯系人
添加的聯系人可以接收到通知。支持設置多個通知聯系人。添加聯系人后,單擊前往創建聯系人。
在彈出頁面中單擊新建聯系人后,輸入聯系人信息。
配置項
描述
通知渠道
目前支持短信、郵件、Webhook和電話。
郵件
輸入通知聯系人的真實郵件地址。
Webhook
手機號
輸入聯系人的真實手機號碼。
驗證
刷新頁面,確定指定地域和命名空間,查看已創建的應用信息。
步驟二:客戶端接入SchedulerX
在pom.xml增加依賴配置
在SpringBoot應用程序的pom.xml文件中添加SchedulerxWorker依賴,以便在Spring Boot應用程序中使用SchedulerX提供的功能。
說明SchedulerX支持SpringBoot2.x和3.x版本接入。
<dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-spring-boot-starter</artifactId> <version>${schedulerx2.version}</version> <!--如果使用logback,需要將log4j和log4j2排除 --> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
重要<version>${schedulerx2.version}</version>替換為最新客戶端版本。例如:<version>1.11.5</version>。更多信息,請參見客戶端版本發布記錄。
配置參數
在SpringBoot應用的配置文件application.properties中添加SchedulerXWorker所需要的參數,例如連接信息、認證信息等,以便連接到SchedulerX應用。
spring.schedulerx2.endpoint=${endpoint} spring.schedulerx2.namespace=${namespace} spring.schedulerx2.groupId=${groupId} # 1.2.1及以上版本設置appKey spring.schedulerx2.appKey=${appKey} # 1.2.1以下版本設置AK/SK,開啟其他特殊配置(例如配置文件定義任務同步、Spring任務自動同步)也需要額外配置以下參數 #spring.schedulerx2.aliyunAccessKey=${aliyunAccessKey} #spring.schedulerx2.aliyunSecretKey=${aliyunSecretKey}
參數來源:
在分布式任務調度平臺左側導航欄的應用管理頁面,單擊目標應用操作列的接入配置,選擇接入的服務類型為Spring Boot。
重要檢查SchedulerX地域和客戶端地域是否保持一致,否則會造成建立連接失敗。
若您使用的是非阿里云服務器或本地環境,確保您已開放公網訪問權限,并在任務調度平臺公網地域創建應用。具體信息,可參見在本地接入公網環境。
說明如果您的客戶端應用包含多個業務,或者需要將定時任務隔離做權限管理,可以通過在控制臺上創建多個應用,實現定時任務的精細化管理。例如,客戶端應用
animals
在控制臺上新建了animals.dog和animals.cat兩個應用,無需為兩個應用分別申請實例,只需在配置文件application.properties中,通過配置spring.schedulerx2.groupId=${groupId}
,并以逗號分隔多個應用來實現,如:spring.schedulerx2.groupId=animals.dog,animals.cat
。參數說明:
endpoint:初始化SchedulerxWorker時,將使用您部署應用的地域(Region)和對應的endpoint。更多信息,請參見Endpoint列表。
namespace:命名空間ID,可以在控制臺的命名空間頁面獲取。
groupId和appKey:groupId應用ID,appKey為應用key,可以在控制臺應用管理頁面獲取。
aliyunAccessKey和aliyunSecretKey:aliyunAccessKey為阿里云賬號的AccessKeyID,aliyunSecretKey為阿里云賬號的AccessKeySecret。您可以登錄用戶信息管理控制臺,在安全信息管理頁面獲取。
更多參數請參見下表:
key
描述
設置值
起始版本
spring.schedulerx2.enabled
是否啟用SchedulerX 2.0的starter。默認為true,無需設置。
true
false
0.1.7
spring.schedulerx2.endpoint
設置Region所在的Endpoint。更多信息,請參見Endpoint列表。
無
0.1.7
spring.schedulerx2.namespace
設置命名空間的UID,可以在控制臺命名空間頁面獲取。
無
0.1.7
spring.schedulerx2.groupId
應用ID,可以在控制臺應用管理頁面獲取。
無
0.1.7
spring.schedulerx2.appKey
應用Key,可以在控制臺應用管理頁面獲取。
無
1.2.1
spring.schedulerx2.host
如果有多個IP(例如VPN或者多網卡),可以設置真實的IP。
無
0.1.7
spring.schedulerx2.port
用戶自定義客戶端監聽端口。如果不設置,則隨機選擇一個可用端口。
無
0.1.7
spring.schedulerx2.blockAppStart
SchedulerX初始化失敗是否阻塞應用啟動。默認為true。
true
false
1.1.0
spring.schedulerx2.shareContainerPool
客戶端所有任務執行是否共享線程池。默認為false。
true
false
1.2.1.2
spring.schedulerx2.sharePoolSize
如果開啟共享線程池,可以自定義線程池大小。默認為64。
無
1.2.1.2
spring.schedulerx2.label
不同客戶端可以設置標簽,任務管理可以指定標簽執行。應用于灰度、壓測等場景。
無
1.2.2.2
spring.schedulerx2.enableCgroupMetrics
是否使用cgroup統計客戶端實例的指標。容器(K8s)環境需要手動開啟,默認為false。
true
false
1.2.2.2
spring.schedulerx2.cgroupPathPrefix
容器內cgroup的路徑。
默認路徑為/sys/fs/cgroup/cpu/,如果存在該路徑則不需要設置。
1.2.2.2
spring.schedulerx2.enableHeartbeatLog
是否打印心跳日志,${user.home}/logs/schedulerx/heartbeat.log
默認為true。
true
false
1.2.4
spring.schedulerx2.mapMasterStatusCheckInterval
設置Map模型檢測所有子任務結束的頻率,單位毫秒。如果秒級別任務需要加快調度頻率時,可以設置。
3000
1.2.5.2
spring.schedulerx2.enableSecondDelayCycleIntervalMs
設置second_delay延遲的單位為毫秒。如果將該值設置為true,控制臺設置的秒級別延遲將會變成毫秒,可以加快調度頻率,默認為false。
true
false
1.2.5.2
spring.schedulerx2.broadcastMasterExecEnable
主節點是否參與廣播任務執行。默認為true。
true
false
1.8.13
spring.schedulerx2.broadcastDispatchRetryTimes
廣播分發失敗重試次數,默認不重試;重試間隔默認2s,且不可配置。
3
1.8.13
spring.schedulerx2.enableSecondDelayStandaloneDispatch
是否開啟秒級別單機任務分發執行,默認為false。
true
false
1.8.13
創建任務處理類
在SpringBoot應用中創建JobProcessor類,實現任務調度。
下方示例代碼介紹如何定時打印一個簡單的JobProcessor類(示例包名:
hello schedulerx2.0
)。package com.aliyun.schedulerx.test.job; import com.alibaba.schedulerx.worker.domain.JobContext; import com.alibaba.schedulerx.worker.processor.JavaProcessor; import com.alibaba.schedulerx.worker.processor.ProcessResult; @Component public class MyHelloJob extends JavaProcessor { @Override public ProcessResult process(JobContext context) throws Exception { System.out.println("hello schedulerx2.0"); return new ProcessResult(true); } }
步驟三:結果驗證
登錄分布式任務調度平臺,在左側導航欄的應用管理,單擊目標應用操作列的查看實例,查看實例詳情信息。
如果實例總數為0,說明應用接入失敗。請檢查并修改本地應用。
如果實例總數不為0,顯示接入實例個數,說明應用接入成功。
后續步驟
應用接入SchedulerX完成后,即可在分布式任務調度平臺創建調度任務。更多信息,請參見創建調度任務。
常見問題
使用SchedulerX時,對于報警信息的處理,請參見報警常見問題。
Spring任務接入SchedulerX任務調度中的常見問題,請參見Spring任務問題。
相關文檔
如您想了解其他客戶端接入方式,請參見客戶端快速接入SchedulerX。