Spring Boot應(yīng)用接入SchedulerX
本文介紹如何將Spring Boot應(yīng)用快速接入SchedulerX。
方案概覽
將Spring Boot應(yīng)用快速接入SchedulerX分為以下幾步:
在pom.xml增加依賴配置:添加依賴后,Spring Boot應(yīng)用即可使用SchedulerX提供的功能。
配置參數(shù):在properties或者yml中配置SchedulerXWorker所需要的參數(shù),連接指定的SchedulerX應(yīng)用。
創(chuàng)建任務(wù)處理類:在應(yīng)用中創(chuàng)建一個(gè)或多個(gè)JobProcessor類,用于實(shí)現(xiàn)具體的任務(wù)邏輯處理,以便SchedulerX能夠?qū)ζ溥M(jìn)行調(diào)度和管理。
視頻演示
前提條件
(可選)已創(chuàng)建命名空間。具體操作,請(qǐng)參見創(chuàng)建命名空間。
已創(chuàng)建資源。具體操作,請(qǐng)參見創(chuàng)建資源。
已創(chuàng)建SpringBoot應(yīng)用。
步驟一:在pom.xml增加依賴配置
在SpringBoot應(yīng)用程序的pom.xml文件中添加SchedulerxWorker依賴,以便在Spring Boot應(yīng)用程序中使用SchedulerX提供的功能。
SchedulerX支持SpringBoot3.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>。更多信息,請(qǐng)參見客戶端版本發(fā)布記錄。
步驟二:配置參數(shù)
在SpringBoot應(yīng)用的配置文件application.properties中添加SchedulerXWorker所需要的參數(shù),例如連接信息、認(rèn)證信息等,以便連接到SchedulerX應(yīng)用。
spring.schedulerx2.endpoint=${endpoint}
spring.schedulerx2.namespace=${namespace}
spring.schedulerx2.groupId=${groupId}
# 1.2.1及以上版本設(shè)置appKey
spring.schedulerx2.appKey=${appKey}
# 1.2.1以下版本設(shè)置AK/SK,開啟其他特殊配置(例如配置文件定義任務(wù)同步、Spring任務(wù)自動(dòng)同步)也需要額外配置以下參數(shù)
#spring.schedulerx2.aliyunAccessKey=${aliyunAccessKey}
#spring.schedulerx2.aliyunSecretKey=${aliyunSecretKey}
參數(shù)來源
登錄分布式任務(wù)調(diào)度平臺(tái),在左側(cè)導(dǎo)航欄的應(yīng)用管理頁面,單擊目標(biāo)應(yīng)用操作列的接入配置,選擇接入的服務(wù)類型為Spring Boot。
重要檢查SchedulerX地域和客戶端地域是否保持一致,否則會(huì)造成建立連接失敗。
若您使用的是非阿里云服務(wù)器或本地環(huán)境,確保您已開放公網(wǎng)訪問權(quán)限,并在任務(wù)調(diào)度平臺(tái)公網(wǎng)地域創(chuàng)建應(yīng)用。具體信息,可參見在本地接入公網(wǎng)環(huán)境。
說明如果一個(gè)應(yīng)用包含多個(gè)業(yè)務(wù),或者需要將定時(shí)任務(wù)進(jìn)行歸類,可以建立多個(gè)分組。例如,應(yīng)用
animals
新建了兩個(gè)分組animals.dogs
和animals.cats
,此時(shí)無需申請(qǐng)兩批實(shí)例分別接入這兩個(gè)分組,在應(yīng)用客戶端中將這兩個(gè)分組配置到groupId=
后面即可,例如groupId=animals.dogs,animals.cats
。示例代碼中的參數(shù)說明如下。
endpoint:初始化SchedulerxWorker時(shí),將使用您部署應(yīng)用的地域(Region)和對(duì)應(yīng)的endpoint。更多信息,請(qǐng)參見Endpoint列表。
namespace:命名空間ID,可以在控制臺(tái)的命名空間頁面獲取。
groupId和appKey:groupId應(yīng)用ID,appKey為應(yīng)用key,可以在控制臺(tái)應(yīng)用管理頁面獲取。
aliyunAccessKey和aliyunSecretKey:aliyunAccessKey為阿里云賬號(hào)的AccessKeyID,aliyunSecretKey為阿里云賬號(hào)的AccessKeySecret。您可以登錄用戶信息管理控制臺(tái),在安全信息管理頁面獲取。
其它需求請(qǐng)參考下表中的參數(shù)進(jìn)行配置。
key | 描述 | 設(shè)置值 | 起始版本 |
spring.schedulerx2.enabled | 是否啟用SchedulerX 2.0的starter。默認(rèn)為true,無需設(shè)置。 |
| 0.1.7 |
spring.schedulerx2.endpoint | 設(shè)置Region所在的Endpoint。更多信息,請(qǐng)參見Endpoint列表。 | 無 | 0.1.7 |
spring.schedulerx2.namespace | 設(shè)置命名空間的UID,可以在控制臺(tái)命名空間頁面獲取。 | 無 | 0.1.7 |
spring.schedulerx2.groupId | 應(yīng)用ID,可以在控制臺(tái)應(yīng)用管理頁面獲取。 | 無 | 0.1.7 |
spring.schedulerx2.appKey | 應(yīng)用Key,可以在控制臺(tái)應(yīng)用管理頁面獲取。 | 無 | 1.2.1 |
spring.schedulerx2.host | 如果有多個(gè)IP(例如VPN或者多網(wǎng)卡),可以設(shè)置真實(shí)的IP。 | 無 | 0.1.7 |
spring.schedulerx2.port | 用戶自定義客戶端監(jiān)聽端口。如果不設(shè)置,則隨機(jī)選擇一個(gè)可用端口。 | 無 | 0.1.7 |
spring.schedulerx2.blockAppStart | SchedulerX初始化失敗是否阻塞應(yīng)用啟動(dòng)。默認(rèn)為true。 |
| 1.1.0 |
spring.schedulerx2.shareContainerPool | 客戶端所有任務(wù)執(zhí)行是否共享線程池。默認(rèn)為false。 |
| 1.2.1.2 |
spring.schedulerx2.sharePoolSize | 如果開啟共享線程池,可以自定義線程池大小。默認(rèn)為64。 | 無 | 1.2.1.2 |
spring.schedulerx2.label | 不同客戶端可以設(shè)置標(biāo)簽,任務(wù)管理可以指定標(biāo)簽執(zhí)行。應(yīng)用于灰度、壓測(cè)等場(chǎng)景。 | 無 | 1.2.2.2 |
spring.schedulerx2.enableCgroupMetrics | 是否使用cgroup統(tǒng)計(jì)客戶端實(shí)例的指標(biāo)。容器(K8s)環(huán)境需要手動(dòng)開啟,默認(rèn)為false。 |
| 1.2.2.2 |
spring.schedulerx2.cgroupPathPrefix | 容器內(nèi)cgroup的路徑。 | 默認(rèn)路徑為/sys/fs/cgroup/cpu/,如果存在該路徑則不需要設(shè)置。 | 1.2.2.2 |
spring.schedulerx2.enableHeartbeatLog | 是否打印心跳日志,${user.home}/logs/schedulerx/heartbeat.log 默認(rèn)為true。 |
| 1.2.4 |
spring.schedulerx2.mapMasterStatusCheckInterval | 設(shè)置Map模型檢測(cè)所有子任務(wù)結(jié)束的頻率,單位毫秒。如果秒級(jí)別任務(wù)需要加快調(diào)度頻率時(shí),可以設(shè)置。 | 3000 | 1.2.5.2 |
spring.schedulerx2.enableSecondDelayCycleIntervalMs | 設(shè)置second_delay延遲的單位為毫秒。如果將該值設(shè)置為true,控制臺(tái)設(shè)置的秒級(jí)別延遲將會(huì)變成毫秒,可以加快調(diào)度頻率,默認(rèn)為false。 |
| 1.2.5.2 |
spring.schedulerx2.broadcastMasterExecEnable | 主節(jié)點(diǎn)是否參與廣播任務(wù)執(zhí)行。默認(rèn)為true。 |
| 1.8.13 |
spring.schedulerx2.broadcastDispatchRetryTimes | 廣播分發(fā)失敗重試次數(shù),默認(rèn)不重試;重試間隔默認(rèn)2s,且不可配置。 | 3 | 1.8.13 |
spring.schedulerx2.enableSecondDelayStandaloneDispatch | 是否開啟秒級(jí)別單機(jī)任務(wù)分發(fā)執(zhí)行,默認(rèn)為false。 |
| 1.8.13 |
步驟三:創(chuàng)建任務(wù)處理類
在SpringBoot中實(shí)現(xiàn)調(diào)度
在SpringBoot應(yīng)用中創(chuàng)建JobProcessor類,實(shí)現(xiàn)任務(wù)調(diào)度。
下方示例代碼介紹如何定時(shí)打印一個(gè)簡(jiǎn)單的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);
}
}
結(jié)果驗(yàn)證
登錄分布式任務(wù)調(diào)度平臺(tái),在 ,單擊已有/最大任務(wù)數(shù)下的已有實(shí)例,查看詳細(xì)信息。
如果實(shí)例總數(shù)為0,說明應(yīng)用接入失敗。請(qǐng)檢查并修改本地應(yīng)用。
如果實(shí)例總數(shù)不為0,顯示接入實(shí)例個(gè)數(shù),說明應(yīng)用接入成功。
后續(xù)步驟
應(yīng)用接入SchedulerX完成后,即可在分布式任務(wù)調(diào)度平臺(tái)創(chuàng)建調(diào)度任務(wù)。更多信息,請(qǐng)參見創(chuàng)建調(diào)度任務(wù)。
常見問題
SchedulerX常見問題匯總,請(qǐng)參見索引。
使用SchedulerX時(shí),對(duì)于報(bào)警信息的處理,請(qǐng)參見報(bào)警常見問題。
Spring任務(wù)接入SchedulerX任務(wù)調(diào)度中的常見問題,請(qǐng)參見Spring任務(wù)問題。
使用SchedulerX中的權(quán)限和接入問題,請(qǐng)參見權(quán)限問題和接入問題。
相關(guān)文檔
如果你想了解SchedulerX相關(guān)名詞解釋,詳情請(qǐng)參見名詞解釋。