Spring Boot应用接入SchedulerX

本文介绍如何将Spring Boot应用接入阿里云的SchedulerX服务,指导您从创建应用入手,配置必要的接入参数,再到Spring Boot项目中进行客户端的设置和验证,确保您的应用顺利运行在SchedulerX平台上,实现任务的自动化调度和精准管理。

视频演示

如需了解Spring Boot应用如何接入SchedulerX的步骤演示,请参见视频演示

前提条件

  • (可选)创建命名空间。当您的应用有较高的安全要求时,您可通过创建命名空间实现资源和服务的隔离,具体操作请参见创建命名空间

  • 已有SpringBoot项目。

方案概览

将Spring Boot应用快速接入SchedulerX分为以下几步:

  1. 创建应用:在阿里云SchedulerX中创建应用,获取接入SchedulerX配置参数,并对任务进行统一管理和配置。

  2. 客户端接入SchedulerX:在项目中的properties或者yml中,配置SchedulerxWorker所需要的参数并创建任务处理类,连接指定的SchedulerX应用。

  3. 结果验证:确认SpringBoot应用接入成功并正常运行。

步骤一:创建应用

1.1基本配置

  1. 登录分布式任务调度平台,选择地域。

  2. 在左侧导航栏的应用管理页面。选择目标命名空间后,单击创建应用。输入应用名应用ID并选择应用类型,按需设计高级配置,单击下一步

    image

    重要

    注意在指定地域和命名空间,创建资源信息,确保资源信息准确性。

    配置项

    描述

    默认值

    应用名

    自定义设置应用名称。

    应用ID

    应用ID为应用接入的GroupID,保证同一个命名空间下唯一,否则将创建失败,可以和应用名一致。

    应用类型

    • 普通应用:非K8s部署的应用,或者对K8s任务没有需求。

    • K8s应用:应用通过K8s部署,并且有需求要使用K8s任务。

    普通应用

    版本

    根据需求选择版本。版本对比请参见产品版本对比

    专业版

    日志服务

    开启后,增加一个Log4j或Logback的配置,即可在控制台看到每次任务调度(包括分布式任务)的业务日志,方便排查问题。

    关闭

    load5

    不能超过客户端机器CPU可用核数

    0

    内存使用率

    表示近5分钟进程内存平均使用率不能大于该阈值,否则判断客户端机器繁忙。

    90%

    磁盘使用率

    表示磁盘使用率不能大于该值,否则判断客户端机器不健康,状态繁忙。

    95%

    是否触发繁忙机器

    机器繁忙时是否继续触发客户端执行。

    打开

    高级配置

    任务最大数量

    一个分组最多支持的Job数量。

    1000

    自动扩容

    选择是否自动扩容。开启时,需要设置全局任务数

    关闭

    流控

    选择是否流控。开启时,需要设置任务实例并发数

    关闭

    日历

    您可在下拉列表中选择在金融日或者工作日调度应用。

    • 金融日:特指金融业务的交易日。

    • 工作日:社会、组织或个人日常活动中正常工作和经营的日期。

    0

1.2通知配置

  1. 通知配置向导页填写相关信息,选择通知渠道并设置联系人

    • 通知渠道目前支持短信邮件Webhook电话

      关于Webhook配置的详细信息,请参见webhook配置说明

    • 通知联系人支持联系人组、联系人两种方式。

      • 联系人组

        联系人组下所有联系人都可以接收到通知。关于创建联系人组,请参见创建通知联系人或通知联系人组

      • 联系人

        1. 添加的联系人可以接收到通知。支持设置多个通知联系人。添加联系人后,单击前往创建联系人

        image

        1. 在弹出页面中单击新建联系人后,输入联系人信息。

        image

        配置项

        描述

        通知渠道

        目前支持短信邮件Webhook电话

        邮件

        输入通知联系人的真实邮件地址。

        Webhook

        • 目前支持企业微信、飞书、钉钉三种。且可以同时配置多个Webhook机器人,机器人链接用英文逗号(,)分割。

        • 需要在钉钉机器人增加关键字“SchedulerX”(区分大小写),否则会收不到告警信息。22

        • 获取Webhook的方法请参见钉钉开发文档企业微信开发文档飞书开发文档

        手机号

        输入联系人的真实手机号码。

  2. 验证

    刷新页面,确定指定地域和命名空间,查看已创建的应用信息。

步骤二:客户端接入SchedulerX

  1. 在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>。更多信息,请参见客户端版本发布记录

  2. 配置参数

    在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。

    image

    重要

    检查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,可以在控制台的命名空间页面获取。1

    • groupId和appKey:groupId应用ID,appKey为应用key,可以在控制台应用管理页面获取。1

    • 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

  3. 创建任务处理类

    在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);
        }
    }              

步骤三:结果验证

登录分布式任务调度平台,在左侧导航栏的应用管理,单击目标应用操作列的查看实例,查看实例详情信息。

image

说明
  • 如果实例总数为0,说明应用接入失败。请检查并修改本地应用。

  • 如果实例总数不为0,显示接入实例个数,说明应用接入成功。

后续步骤

应用接入SchedulerX完成后,即可在分布式任务调度平台创建调度任务。更多信息,请参见创建调度任务

常见问题

相关文档

如您想了解其他客户端接入方式,请参见客户端快速接入SchedulerX