调度执行器
组件编码
hzero-boot-scheduler
一、简介
1.1 概述
调度服务客户端,配合调度服务使用,主要负责调度任务的具体执行,包括任务定义、日志回写、自动注册等功能。
1.2 组件坐标
<dependency>
<groupId>org.hzero.boot</groupId>
<artifactId>hzero-boot-scheduler</artifactId>
<version>${hzero.boot.version}</version>
</dependency>
1.3 功能特性
- 执行器自动注册
- 任务生命周期监听
- 任务进度控制
- 任务日志存储
二、使用说明
2.1 配置说明
服务需要注册为执行器,pom中添加依赖该客户端,添加yml文件配置声明执行器编码,多个执行器编码使用逗号隔开
**注意:**执行器编码只能使用大写字母、数字、中划线、下划线、点
hzero:
scheduler:
executor-code: XXX_EXECUTOR,XX_EXECUTOR
客户端的自动注册功能是默认开启的,可以通过配置来关闭
hzero:
scheduler:
auto-register: false
客户端向服务自动注册的IP和端口都是自动读取的,若IP读取的不对,可以手动指定注册的IP
hzero:
scheduler:
address: 192.168.XX.XXX
调度任务产生的日志,默认会上传到文件服务。若不使用文件服务存储日志文件,可以使用该配置关闭上传功能,日志会存储在日志表中,长度限制2000
hzero:
scheduler:
upload-log: false
2.2 任务的具体实现
- 简单类型任务。
任务定义需要实现org.hzero.boot.scheduler.infra.handler.IJobHandler
接口,重写execute
方法。同时类需要添加注解声明jobHandler。
/**
* 示例任务
*/
@JobHandler("demo")
public class DemoJob implements IJobHandler {
@Override
public ReturnT execute(Map<String, String> map, SchedulerTool tool) {
// 刷新任务进度及描述
tool.updateProgress(50, "任务执行中...");
// 任务日志记录
tool.info("示例任务执行成功!");
return ReturnT.SUCCESS;
}
}
execute
方法的两个参数,map是任务创建时传递来的json格式的参数。tool中提供了任务的一些操作方法,下面会详细说明。
三、定制化开发
-
org.hzero.boot.scheduler.infra.handler.IJobHandler
提供的生命周期监控,没有需求可以不重写onCreate
方法在任务开始前执行onException
方法在任务执行捕获到异常时执行onFinish
方法在任务执行结束后执行
-
SchedulerTool
提供的功能- 任务日志文件形式记录
tool提供了debug``info``warn``error
四个方法用来记录日志,日志最终会通过文件服务保存。文件的默认后缀名为“.txt”。可以通过SchedulerTool
的setFileSuffix
方法自行覆盖。也可以使用setByteArrayOutputStream
方法自行覆盖日志文件内容。 - 任务进度更新
tool提供了updateProgress
方法更新当前任务进度以及任务进度描述,调度日志页面可以实时查看任务进度。任务进度允许0-100 - 添加子任务
tool提供了addChildJob
方法用于动态创建子任务。 - 获取当前任务的相关信息
tool提供了getJobDataDTO
方法,获取JobDataDTO
对象,包含当前任务的一些属性、
- 任务日志文件形式记录
-
获取用户信息
- 可以使用
DetailsHelper
获取任务创建人的租户ID、角色ID、用户ID等信息,获取任务所属租户tool.getBelongTenantId()
- 可以使用
-
关于任务停止
- 对任务的
暂停``终止
操作,会触发客户端的任务停止功能,默认情况下,调度任务停止时客户端正在执行的任务不会停止,会继续运行直到任务结束。 - 若需要使任务中途停止,可以使用
org.hzero.boot.scheduler.infra.handler.IJobHandlerAllowStop
替换org.hzero.boot.scheduler.infra.handler.IJobHandler
。IJobHandlerAllowStop
提供了onStop
方法,allowStop
用于标识任务的是否可以停止。前端点击终止
,allowStop
返回值为true,会执行onStop
方法做为任务停止后的补偿执行方法。IJobHandlerAllowStop
提供了onPause
方法,allowStop
用于标识任务的是否可以停止。前端点击暂停
,allowStop
返回值为true,会执行onPause
方法做为任务暂停后的补偿执行方法。
- 对任务的
四、版本更新日志
版本 0.8.0.RELEASE [2019-02-15]
- 使用quartz替换xxl-job
版本 0.10.0.RELEASE [2019-06-23]
- 日志文件支持自定义格式或覆盖文件内容
- 调整任务暂停/停止处理逻辑
版本 1.0.0.RELEASE [2019-09-06]
- 执行器支持多编码
- 自动注册可手动指定IP
- 日志可不使用文件服务存储
版本 1.1.0.RELEASE [2019-11-09]
- 调整客户端日志回写逻辑,调度服务重启也不会丢失日志