3步开发DolphinScheduler自定义任务插件:从0到1实现专属任务类型
你还在为重复开发数据任务烦恼?团队需要特定业务的任务类型却无从下手?本文将通过3个核心步骤,带你从零构建DolphinScheduler自定义任务插件,无需深入框架源码,即可让你的任务类型像官方组件一样无缝集成。
插件开发准备:理解项目架构与环境
在开始编码前,先了解DolphinScheduler的插件化架构。项目采用分层设计,任务插件统一管理在dolphinscheduler-task-plugin/目录下,每个任务类型对应独立模块(如Shell任务dolphinscheduler-task-shell/、SQL任务dolphinscheduler-task-sql/)。
任务插件架构
核心依赖模块:
- dolphinscheduler-task-api/:任务插件API定义,包含抽象类与接口
- dolphinscheduler-spi/:系统服务接口,提供插件扩展点
- dolphinscheduler-common/:通用工具类与常量定义
第一步:创建插件项目结构
Maven模块配置
在dolphinscheduler-task-plugin/目录下创建新模块(以custom-task为例),编写pom.xml:
<parent>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler-task-plugin</artifactId>
<version>${project.version}</version>
</parent>
<dependencies>
<dependency>
<groupId>org.apache.dolphinscheduler</groupId>
<artifactId>dolphinscheduler-task-api</artifactId>
</dependency>
<!-- 添加自定义任务所需依赖 -->
</dependencies>
标准项目结构
custom-task/
├── src/main/java/org/apache/dolphinscheduler/plugin/task/custom/
│ ├── CustomTask.java // 任务执行类
│ ├── CustomParameters.java // 参数模型类
│ └── CustomTaskPlugin.java // 插件注册类
├── src/main/resources/
│ └── META-INF/services/ // SPI服务注册
└── pom.xml
第二步:实现核心任务类
1. 参数模型定义
继承AbstractParameters实现任务参数校验与序列化:
public class CustomParameters extends AbstractParameters {
private String customField; // 自定义业务参数
@Override
public boolean checkParameters() {
return StringUtils.isNotBlank(customField);
}
// getter/setter
}
2. 任务执行类
继承AbstractTask实现核心业务逻辑,参考ShellTask.java的实现模式:
@Slf4j
public class CustomTask extends AbstractTask {
private CustomParameters parameters;
public CustomTask(TaskExecutionContext context) {
super(context);
}
@Override
public void init() {
// 参数初始化与校验
parameters = JSONUtils.parseObject(getTaskRequest().getTaskParams(), CustomParameters.class);
if (!parameters.checkParameters()) {
throw new TaskException("Custom task parameters are invalid");
}
}
@Override
public void handle(TaskCallBack callback) throws TaskException {
try {
// 实现自定义业务逻辑
log.info("Executing custom task with parameter: {}", parameters.getCustomField());
// 任务进度回调
callback.onProgressUpdate(50, "Processing...");
// 设置成功状态
setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);
} catch (Exception e) {
log.error("Custom task failed", e);
setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);
throw new TaskException("Task execution failed", e);
}
}
@Override
public void cancel() throws TaskException {
// 实现任务取消逻辑
}
@Override
public AbstractParameters getParameters() {
return parameters;
}
}
3. 插件注册
创建SPI服务文件META-INF/services/org.apache.dolphinscheduler.spi.task.TaskPlugin:
org.apache.dolphinscheduler.plugin.task.custom.CustomTaskPlugin
实现插件定义类:
public class CustomTaskPlugin implements TaskPlugin {
@Override
public String getName() {
return "CUSTOM"; // 任务类型名称,页面显示用
}
@Override
public AbstractTask createTask(TaskExecutionContext context) {
return new CustomTask(context);
}
@Override
public AbstractParameters createParameters() {
return new CustomParameters();
}
}
第三步:UI配置与打包部署
前端配置
在dolphinscheduler-ui/src/views/task/目录添加任务配置表单组件,参考shell/ShellTask.vue实现参数录入界面。
打包与部署
执行项目根目录打包命令:
mvn clean package -DskipTests -pl dolphinscheduler-task-plugin/custom-task
将生成的custom-task-*.jar复制到部署目录的lib/文件夹下,重启DolphinScheduler服务:
./bin/dolphinscheduler-daemon.sh restart master-server
./bin/dolphinscheduler-daemon.sh restart worker-server
插件调试与验证
本地调试配置
在IDE中配置WorkerServer启动参数,指定插件目录:
-Dplugin.dir=./dolphinscheduler-task-plugin/custom-task/target/
任务创建与执行
登录DolphinScheduler UI,在工作流定义页面选择"自定义任务"类型,配置参数并运行。通过监控页面查看任务执行状态,日志可在worker/logs/中查看。
自定义任务配置界面
总结与扩展
通过本文3个步骤,你已掌握:
- 插件项目的标准结构与依赖配置
- 核心任务类的实现方法(参数校验、业务逻辑、状态回调)
- 插件打包部署与验证流程
进阶方向:
- 实现任务指标收集:集成dolphinscheduler-meter/模块
- 添加告警功能:扩展dolphinscheduler-alert/通知渠道
- 支持动态表单:通过前端动态渲染配置项
完整开发文档可参考官方开发指南,更多插件示例可查看dolphinscheduler-task-plugin/目录下的官方实现。
收藏本文,关注项目RELEASE.md获取插件API变更通知,让你的自定义任务持续兼容新版本。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



