本文介绍如何使用Spring Boot应用快速接入SchedulerX。
视频演示
前提条件
客户端接入SchedulerX
在应用程序的
pom.xml
文件中添加SchedulerxWorker依赖。schedulerx2.version
使用最新客户端版本。更多信息,请参见客户端版本发布记录。<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文件中设置如下相关参数,初始化SchedulerxWorker。
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}
说明如果一个应用包含多个业务,或者需要将定时任务进行归类,可以建立多个分组。例如,应用
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。
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。
true
false
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。
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
在应用中创建
JobProcessor
类,实现任务调度。下方示例代码介绍如何实现一个简单的定时打印“hello schedulerx2.0”的
JobProcessor
类。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完成后,即可在分布式任务调度平台创建调度任务。更多信息,请参见创建调度任务。