Spring Boot应用接入SchedulerX

更新时间:
复制 MD 格式

本文介绍如何将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. 登录MSE SchedulerX控制台,并在顶部菜单栏选择地域。

  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}
    
    # 如果不使用appKey,可以使用阿里云AK/SK,或者使用stsToken
    #spring.schedulerx2.aliyunAccessKey=${aliyunAccessKey}
    #spring.schedulerx2.aliyunSecretKey=${aliyunSecretKey} 
    #spring.schedulerx2.stsToken=${aliyunStsToken}                   

    参数来源:

    在MSE SchedulerX控制台左侧导航栏的应用管理页面,单击目标应用操作列的接入配置,选择接入的服务类型为Spring Boot。在弹出的接入配置对话框中,可查看endpoint、namespace、groupId、appKey等参数的取值示例,将其填入配置文件中对应的参数位置。

    重要

    检查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

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

步骤三:结果验证

登录MSE SchedulerX控制台,在左侧导航栏的应用管理,查看目标应用的实例总数。

image

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

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

后续步骤

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

常见问题

相关文档

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