Spring Boot应用接入SchedulerX
本文介绍如何将Spring Boot应用快速接入SchedulerX。
方案概览
将Spring Boot应用快速接入SchedulerX分为以下几步:
在pom.xml增加依赖配置:添加依赖后,Spring Boot应用即可使用SchedulerX提供的功能。
配置参数:在properties或者yml中配置SchedulerXWorker所需要的参数,连接指定的SchedulerX应用。
创建任务处理类:在应用中创建一个或多个JobProcessor类,用于实现具体的任务逻辑处理,以便SchedulerX能够对其进行调度和管理。
视频演示
前提条件
步骤一:在pom.xml增加依赖配置
在SpringBoot应用程序的pom.xml文件中添加SchedulerxWorker依赖,以便在Spring Boot应用程序中使用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>。更多信息,请参见客户端版本发布记录。
步骤二:配置参数
在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.dogs
和animals.cats
,此时无需申请两批实例分别接入这两个分组,在应用客户端中将这两个分组配置到groupId=
后面即可,例如groupId=animals.dogs,animals.cats
。示例代码中的参数说明如下。
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,无需设置。 |
| 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。 |
| 1.1.0 |
spring.schedulerx2.shareContainerPool | 客户端所有任务执行是否共享线程池。默认为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。 |
| 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。 |
| 1.2.4 |
spring.schedulerx2.mapMasterStatusCheckInterval | 设置Map模型检测所有子任务结束的频率,单位毫秒。如果秒级别任务需要加快调度频率时,可以设置。 | 3000 | 1.2.5.2 |
spring.schedulerx2.enableSecondDelayCycleIntervalMs | 设置second_delay延迟的单位为毫秒。如果将该值设置为true,控制台设置的秒级别延迟将会变成毫秒,可以加快调度频率,默认为false。 |
| 1.2.5.2 |
spring.schedulerx2.broadcastMasterExecEnable | 主节点是否参与广播任务执行。默认为true。 |
| 1.8.13 |
spring.schedulerx2.broadcastDispatchRetryTimes | 广播分发失败重试次数,默认不重试;重试间隔默认2s,且不可配置。 | 3 | 1.8.13 |
spring.schedulerx2.enableSecondDelayStandaloneDispatch | 是否开启秒级别单机任务分发执行,默认为false。 |
| 1.8.13 |
步骤三:创建任务处理类
在SpringBoot中实现调度
在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常见问题汇总,请参见索引。
使用SchedulerX时,对于报警信息的处理,请参见报警常见问题。
Spring任务接入SchedulerX任务调度中的常见问题,请参见Spring任务问题。
相关文档
如果你想了解SchedulerX相关名词解释,详情请参见名词解释。