Skip to content

调度中心

业务方可通过自定义Bean的方式,将定时任务的执行体信息注册到调度中心,当任务被调度时,调度中心按照注册的信息调起任务执行体,完成业务功能。

Maven坐标

xml
<dependency>
    <groupId>com.ikingtech.framework</groupId>
    <artifactId>sdk-job-embedded</artifactId>
</dependency>

示例

java

@Job(handler = "TEST_JOB_HANDLER")
public void testJob(String param) {
    log.info("test job invoked!");
}

注解

  • @Job
功能定义定时任务执行体
使用位置方法
参数类型默认值说明
handlerStringN/A定时任务执行体标识。
本服务内唯一。

任务启动/停止

  • 如需获取任务启动/停止能力,请确保依赖了以下组件:
xml
<dependency>
    <groupId>com.ikingtech.framework</groupId>
    <artifactId>sdk-job-api</artifactId>
</dependency>
  • 提供任务调度功能的接口及数据模型定义及任务调度能力。

提供的接口

接口地址接口说明
/job/start启动定时任务。
/job/stop停止定时任务。

使用流程

  • 使用方式(单体)

  1. 通过pom文件引入依赖。
xml
<dependency>
    <groupId>com.ikingtech.platform</groupId>
    <artifactId>service-job</artifactId>
</dependency>
  1. 配置
yaml
iking:
  framework:
    web:
      version: @project.version@
java

@SpringBootApplication
@MapperScan(basePackages = "**.**.mapper")
public class ServerBootstrap {
    public static void main(String[] args) {
        SpringApplication.run(ServerBootstrap.class, args);
    }
}
  1. 数据库初始化sql如下
sql
DROP TABLE IF EXISTS `job`;
CREATE TABLE `job`
(
    `id`                 char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci     NOT NULL COMMENT '主键/任务编号',
    `tenant_code`        varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  NULL DEFAULT '' COMMENT '租户标识',
    `name`               varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称',
    `description`        varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '任务描述',
    `type`               varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  NOT NULL COMMENT '任务类型',
    `executor_client_id` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '执行器客户端标识',
    `executor_handler`   varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '执行器标识',
    `param`              text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci         NULL COMMENT '任务参数',
    `cron`               varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron表达式',
    `next_time`          datetime(0)                                                   NULL DEFAULT NULL COMMENT '下一次任务执行时间',
    `status`             varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  NULL DEFAULT NULL COMMENT '任务状态',
    `create_time`        datetime(0)                                                   NULL DEFAULT NULL COMMENT '创建时间',
    `create_by`          char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci     NULL DEFAULT '' COMMENT '创建人编号',
    `create_name`        varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  NULL DEFAULT '' COMMENT '创建人姓名',
    `update_time`        datetime(0)                                                   NULL DEFAULT NULL COMMENT '更新时间',
    `update_by`          char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci     NULL DEFAULT '' COMMENT '更新人编号',
    `update_name`        varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  NULL DEFAULT '' COMMENT '更新人姓名',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
  CHARACTER SET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT = '任务'
  ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
  1. 使用示例
java

@Job(handler = "TEST_JOB_HANDLER")
public void testOneJob(String param) {
    log.info("收到一次性定时任务,参数 {}", param);
}

public void startTestJob(String param) {
    R<Object> jobId = JobOps.once()
            .handler("TEST_JOB_HANDLER")
            .nextTime(LocalDateTime.of(2023, 8, 21, 21, 0, 0))
            .param(param)
            .start();
    log.info("test job started! id is {}, param is {}", jobId, param);
}
java

@Job(handler = "TEST_JOB_HANDLER")
public void testTwoJob(String param) {
    log.info("收到周期性定时任务,参数 {}", param);
}

public void startTestJob(String param) {
    R<Object> jobId = JobOps.repeat()
            .handler("TEST_JOB_HANDLER")
            .cron("0 0 12 * * ? *")
            .param(param)
            .start();
    log.info("test job started! id is {}, param is {}", jobId, param);
}
  • 微服务配置文件

微服务环境下需要将arch参数值改为micro_service,其余同上。

yaml
iking:
  framework:
    web:
      version: @project.version@
      arch: micro_service