Spring Boot應(yīng)用接入SchedulerX
本文介紹如何使用Spring Boot應(yīng)用快速接入SchedulerX。
視頻演示
前提條件
(可選)已創(chuàng)建命名空間。具體操作,請(qǐng)參見(jiàn)創(chuàng)建命名空間。
已創(chuàng)建資源。具體操作,請(qǐng)參見(jiàn)創(chuàng)建資源。
客戶(hù)端接入SchedulerX
在應(yīng)用程序的
pom.xml
文件中添加SchedulerxWorker依賴(lài)。schedulerx2.version
使用最新客戶(hù)端版本。更多信息,請(qǐng)參見(jiàn)客戶(hù)端版本發(fā)布記錄。<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>
在application.properties文件中設(shè)置如下相關(guān)參數(shù),初始化SchedulerxWorker。
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,開(kāi)啟其他特殊配置(例如配置文件定義任務(wù)同步、Spring任務(wù)自動(dòng)同步)也需要額外配置以下參數(shù) #spring.schedulerx2.aliyunAccessKey=${aliyunAccessKey} #spring.schedulerx2.aliyunSecretKey=${aliyunSecretKey}
說(shuō)明如果一個(gè)應(yīng)用包含多個(gè)業(yè)務(wù),或者需要將定時(shí)任務(wù)進(jìn)行歸類(lèi),可以建立多個(gè)分組。例如,應(yīng)用
animals
新建了兩個(gè)分組animals.dogs
和animals.cats
,此時(shí)無(wú)需申請(qǐng)兩批實(shí)例分別接入這兩個(gè)分組,在應(yīng)用客戶(hù)端中將這兩個(gè)分組配置到groupId=
后面即可,例如groupId=animals.dogs,animals.cats
。示例代碼中的參數(shù)說(shuō)明如下。
endpoint:初始化SchedulerxWorker時(shí),將使用您部署應(yīng)用的地域(Region)和對(duì)應(yīng)的endpoint。更多信息,請(qǐng)參見(jiàn)Endpoint列表。
namespace:命名空間ID,可以在控制臺(tái)的命名空間頁(yè)面獲取。
groupId和appKey:groupId應(yīng)用ID,appKey為應(yīng)用key,可以在控制臺(tái)應(yīng)用管理頁(yè)面獲取。
aliyunAccessKey和aliyunSecretKey:aliyunAccessKey為阿里云賬號(hào)的AccessKeyID,aliyunSecretKey為阿里云賬號(hào)的AccessKeySecret。您可以登錄用戶(hù)信息管理控制臺(tái),在安全信息管理頁(yè)面獲取。
其它需求請(qǐng)參考下表中的參數(shù)進(jìn)行配置。
key
描述
設(shè)置值
起始版本
spring.schedulerx2.enabled
是否啟用SchedulerX 2.0的starter。默認(rèn)開(kāi)啟,無(wú)需設(shè)置。
取值說(shuō)明如下,默認(rèn)為true。
true
false
0.1.7
spring.schedulerx2.endpoint
設(shè)置Region所在的Endpoint。更多信息,請(qǐng)參見(jiàn)Endpoint列表。
無(wú)
0.1.7
spring.schedulerx2.namespace
設(shè)置命名空間的UID,可以在控制臺(tái)命名空間頁(yè)面獲取。
無(wú)
0.1.7
spring.schedulerx2.groupId
應(yīng)用ID,可以在控制臺(tái)應(yīng)用管理頁(yè)面獲取。
無(wú)
0.1.7
spring.schedulerx2.appKey
應(yīng)用Key,可以在控制臺(tái)應(yīng)用管理頁(yè)面獲取。
無(wú)
1.2.1
spring.schedulerx2.host
如果有多個(gè)IP(例如VPN或者多網(wǎng)卡),可以設(shè)置真實(shí)的IP。
無(wú)
0.1.7
spring.schedulerx2.port
用戶(hù)自定義客戶(hù)端監(jiān)聽(tīng)端口。如果不設(shè)置,則隨機(jī)選擇一個(gè)可用端口。
無(wú)
0.1.7
spring.schedulerx2.blockAppStart
SchedulerX初始化失敗是否阻塞應(yīng)用啟動(dòng)。默認(rèn)為true。
取值說(shuō)明如下,默認(rèn)為true。
true
false
1.1.0
spring.schedulerx2.shareContainerPool
客戶(hù)端所有任務(wù)執(zhí)行是否共享線(xiàn)程池。默認(rèn)為false。
無(wú)
1.2.1.2
spring.schedulerx2.sharePoolSize
如果開(kāi)啟共享線(xiàn)程池,可以自定義線(xiàn)程池大小。默認(rèn)為64。
無(wú)
1.2.1.2
spring.schedulerx2.label
不同客戶(hù)端可以設(shè)置標(biāo)簽,任務(wù)管理可以指定標(biāo)簽執(zhí)行。應(yīng)用于灰度、壓測(cè)等場(chǎng)景。
無(wú)
1.2.2.2
spring.schedulerx2.enableCgroupMetrics
是否使用cgroup統(tǒng)計(jì)客戶(hù)端實(shí)例的指標(biāo)。容器(K8s)環(huán)境需要手動(dòng)開(kāi)啟。
取值說(shuō)明如下,默認(rèn)為false。
true
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
取值說(shuō)明如下,默認(rèn)為true。
true
false
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)度頻率。
取值說(shuō)明如下,默認(rèn)為false。
true
false
1.2.5.2
在應(yīng)用中創(chuàng)建
JobProcessor
類(lèi),實(shí)現(xiàn)任務(wù)調(diào)度。下方示例代碼介紹如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的定時(shí)打印“hello schedulerx2.0”的
JobProcessor
類(lèi)。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)證
客戶(hù)端接入完成,將該應(yīng)用發(fā)布到阿里云。
登錄分布式任務(wù)調(diào)度平臺(tái),在頂部菜單欄選擇地域,然后在左側(cè)導(dǎo)航欄,單擊應(yīng)用管理,在應(yīng)用管理頁(yè)面查看實(shí)例總數(shù)。
如果實(shí)例總數(shù)為0,說(shuō)明應(yīng)用接入失敗。請(qǐng)檢查、修改本地應(yīng)用。
如果實(shí)例總數(shù)不為0,顯示接入的實(shí)例個(gè)數(shù),說(shuō)明應(yīng)用接入成功。在操作列單擊查看實(shí)例,即可在連接實(shí)例對(duì)話(huà)框中查看實(shí)例列表。
后續(xù)步驟
應(yīng)用接入SchedulerX完成后,即可在分布式任務(wù)調(diào)度平臺(tái)創(chuàng)建調(diào)度任務(wù)。更多信息,請(qǐng)參見(jiàn)創(chuàng)建調(diào)度任務(wù)。