调度中心
业务方可通过自定义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
功能 | 定义定时任务执行体 | ||
---|---|---|---|
使用位置 | 方法 | ||
参数 | 类型 | 默认值 | 说明 |
handler | String | N/A | 定时任务执行体标识。 本服务内唯一。 |
任务启动/停止
- 如需获取任务启动/停止能力,请确保依赖了以下组件:
xml
<dependency>
<groupId>com.ikingtech.framework</groupId>
<artifactId>sdk-job-api</artifactId>
</dependency>
- 提供任务调度功能的接口及数据模型定义及任务调度能力。
提供的接口
接口地址 | 接口说明 |
---|---|
/job/start | 启动定时任务。 |
/job/stop | 停止定时任务。 |
使用流程
使用方式(单体)
- 通过pom文件引入依赖。
xml
<dependency>
<groupId>com.ikingtech.platform</groupId>
<artifactId>service-job</artifactId>
</dependency>
- 配置
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);
}
}
- 数据库初始化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;
- 使用示例
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