本文介绍如何将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。