Spring Boot应用接入SchedulerX

更新时间: 2023-11-08 17:52:04

本文介绍如何使用Spring Boot应用快速接入SchedulerX。

视频演示

前提条件

客户端接入SchedulerX

操作步骤

  1. 在应用程序的pom.xml文件中添加SchedulerxWorker依赖。

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

    ${schedulerx2.version}:配置为最新客户端版本。客户端版本,请参见版本发布记录

  2. application.properties文件中设置如下相关参数,初始化SchedulerxWorker。

    spring.schedulerx2.endpoint=${endpoint}
    spring.schedulerx2.namespace=${namespace}
    spring.schedulerx2.groupId=${groupId}
    # 1.2.1及以上版本设置appKey
    spring.schedulerx2.appKey=${appKey}                
    • ${endpoint}:初始化SchedulerxWorker时,将使用您部署应用的地域(Region)和对应的endpoint。更多信息,请参见Endpoint列表

    • ${namespace}:命名空间ID,在命名空间页面获取。

      1
    • ${groupId}${appKey} ${groupId}为应用ID,${appKey}为应用key,在应用管理页面获取。您也可以在操作列,单击接入配置获取对应接入方式的配置信息。

      1
    说明

    如果一个应用包含多个业务,或需将定时任务归类,可以建立多个分组。例如,应用animals新建了两个分组animals.dogsanimals.cats,此时无需申请两批实例分别接入这两个分组,只需在应用客户端中将这两个分组配置到groupId=后面即可,例如groupId=animals.dogs,animals.cats

    参数配置

    key

    描述

    起始版本

    spring.schedulerx2.enabled

    是否启用SchedulerX 2.0的starter。取值:

    • 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

    • false

    默认为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)环境需要手动开启。取值:

    • true

    • false

    默认为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

    • false

    默认为true。

    1.2.4

    spring.schedulerx2.mapMasterStatusCheckInterval

    设置Map模型检测所有子任务结束的频率,单位:毫秒。如果秒级别任务需要加快调度频率时,可以配置该参数。本文示例设置为3000。

    1.2.5.2

    spring.schedulerx2.enableSecondDelayCycleIntervalMs

    设置second_delay延迟的单位为毫秒。如果将该值设置为true,控制台设置的秒级别延迟将会变成毫秒,可以加快调度频率。取值:

    • true

    • false

    默认为false

    1.2.5.2

    spring.schedulerx2.h2DatabaseUser

    设置H2内置数据库用户。例如:root。默认为sa

    1.9.7

    spring.schedulerx2.h2DatabasePassword

    设置H2内置数据库密码。例如:123456。默认为空。

    1.9.7

    spring.schedulerx2.graceShutdownMode

    设置优雅下线模式。不配置则不开启优雅下线能力。

    • WAIT_ALL:等待全部。

    • WAIT_RUNNING:等待运行中。

    1.10.8

    spring.schedulerx2.graceShutdownTimeout

    设置优雅下线等待超时时长,单位:秒。不配置或小于等于0则不进行超时控制。

    1.10.8

  3. 在应用中创建JavaProcessor类,实现任务调度。下方示例代码介绍如何实现一个简单的定时打印hello schedulerx2.0的JavaProcessor类。

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

结果验证

  1. 客户端接入完成,将该应用发布到阿里云。

  2. 登录分布式任务调度平台,在顶部菜单栏选择地域,然后在左侧导航栏,单击应用管理,在应用管理页面查看实例总数

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

    • 如果实例总数不为0,显示接入的实例个数,说明应用接入成功。在操作列单击查看实例,即可在连接实例对话框中查看实例列表。

后续步骤

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

阿里云首页 分布式任务调度 SchedulerX 相关技术圈