DolphinScheduler 二次开发实战:从环境搭建到核心问题规避

张开发
2026/4/18 4:20:05 15 分钟阅读

分享文章

DolphinScheduler 二次开发实战:从环境搭建到核心问题规避
1. 环境准备从零搭建开发环境第一次接触DolphinScheduler二次开发时环境搭建这个环节就让我栽了不少跟头。记得当时为了跑通一个简单的工作流整整折腾了两天。现在回头看其实只要把几个关键组件准备到位整个过程会顺畅很多。开发环境需要准备四大件JDK 1.8、MySQL 5.7、ZooKeeper 3.4.6和Node.js 12。这里特别提醒下JDK最好用1.8版本高版本可能会遇到兼容性问题。我测试过OpenJDK和Oracle JDK都可以但更推荐用Oracle JDK稳定性更好些。MySQL安装有个小技巧建议单独创建一个名为dolphinscheduler的数据库用户不要用root账号。权限设置可以这样操作CREATE USER ds% IDENTIFIED BY your_password; GRANT ALL PRIVILEGES ON dolphinscheduler.* TO ds%; FLUSH PRIVILEGES;ZooKeeper的安装最简单下载解压后在conf目录下复制一份zoo_sample.cfg改名为zoo.cfg基本不用改配置就能用。Windows用户可以直接双击zkServer.cmd启动Linux/Mac用户用./zkServer.sh start命令。前端环境需要特别注意Node.js版本12.x到14.x都测试过没问题但16.x以上版本可能会报错。安装完Node.js后还需要全局安装pnpmnpm install -g pnpm2. 源码获取与初始化源码获取看似简单但版本选择很有讲究。我建议直接从GitHub拉取最新稳定分支比如3.1.x系列。克隆代码时记得加上--depth1参数能大幅减少下载量git clone --depth 1 -b 3.1.3 https://github.com/apache/dolphinscheduler.git初始化数据库是最容易出错的环节。官方提供的SQL脚本在dolphinscheduler-dao/src/main/resources/sql目录下有mysql、postgresql等不同版本。执行时要注意两点一是确保字符集为utf8mb4二是按顺序执行ddl和dml文件。我习惯用Navicat这样的GUI工具执行比命令行更直观。源码导入IDE时Maven依赖下载可能会卡住。这时候可以试试以下方法更换阿里云镜像源先单独下载mysql-connector-java的jar包放到本地仓库对根pom.xml执行mvn clean install -DskipTests3. 配置文件调整实战配置文件调整是二次开发的第一道坎我整理了几个关键配置项的修改要点数据库配置需要修改三处dolphinscheduler-master/src/main/resources/application.yamldolphinscheduler-worker/src/main/resources/application.yamldolphinscheduler-api/src/main/resources/application.yaml主要修改spring.datasource下的url、username和password。有个坑点是MySQL连接参数要加上时区设置url: jdbc:mysql://localhost:3306/dolphinscheduler?useUnicodetruecharacterEncodingUTF-8useSSLfalseserverTimezoneAsia/ShanghaiZooKeeper配置在application.yaml中registry: type: zookeeper zookeeper: namespace: dolphinscheduler connect-string: localhost:2181 retry-policy: base-sleep-time: 60ms max-sleep: 300ms max-retries: 5日志配置建议开发阶段开启控制台输出修改logback-spring.xml文件在root标签内添加appender-ref refSTDOUT/4. 项目启动与调试技巧启动顺序有讲究先启动ZooKeeper再启动MasterServer然后是WorkerServer最后是ApiApplicationServer。每个服务都需要配置特定的VM参数MasterServer的VM参数-Dlogging.configclasspath:logback-spring.xml -Ddruid.mysql.usePingMethodfalse -Dspring.profiles.activemysql如果遇到Command line is too long错误在IDEA的.idea/workspace.xml中添加property namedynamic.classpath valuetrue /前端启动有个小技巧先修改dolphinscheduler-ui/.env.development文件中的API地址VUE_APP_DEV_API_URLhttp://localhost:12345然后执行cd dolphinscheduler-ui pnpm install pnpm run dev5. 打包避坑指南打包前有三件事必须做确保前端能单独打包成功检查代码风格是否符合规范测试所有核心功能正常前端打包命令cd dolphinscheduler-ui pnpm run build后端打包时如果不想打包前端可以修改根pom.xml注释掉frontend-maven-plugin插件部分。完整打包命令mvn clean install -Prelease -Dmaven.test.skiptrue我遇到最多的打包问题是代码风格检查失败可以在pom.xml中临时跳过检查plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-checkstyle-plugin/artifactId configuration skiptrue/skip /configuration /plugin6. 二次开发核心问题解决依赖冲突是最常见的问题。建议先用mvn dependency:tree命令分析依赖树遇到冲突可以用exclusions排除exclusions exclusion groupIdcom.google.guava/groupId artifactIdguava/artifactId /exclusion /exclusionsAPI开发时要注意新增接口需要在前端src/views/projects/目录下对应位置添加页面组件。我建议先参考现有接口实现保持风格一致。任务插件开发需要继承AbstractTaskPlugin类重点实现handle()和cancel()方法。开发完成后要把插件配置到dolphinscheduler-spi/src/main/resources/META-INF/services目录下。数据库变更需要同步修改三个地方dolphinscheduler-dao模块中的mapper接口dolphinscheduler-common模块中的实体类dolphinscheduler-dao/src/main/resources/sql下的升级脚本7. 调试与优化技巧远程调试可以大幅提高效率在VM参数中添加-agentlib:jdwptransportdt_socket,servery,suspendn,address5005日志排查有个小技巧修改logback-spring.xml中的日志级别logger nameorg.apache.dolphinscheduler levelDEBUG/性能优化方面我建议调整worker线程数task: execute: threads: 100 host-weight: 100内存设置也很关键Master和Worker的JVM参数建议-Xms2g -Xmx4g -XX:HeapDumpOnOutOfMemoryError8. 版本升级注意事项跨版本升级需要特别注意数据库迁移。官方提供的升级脚本在dolphinscheduler-dao/src/main/resources/sql/upgrade目录下必须按版本顺序依次执行。代码合并冲突通常集中在以下几个文件dolphinscheduler-common/src/main/resources/common.propertiesdolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ScheduleMapper.xmldolphinscheduler-ui/src/router/index.js升级后一定要重新编译前端有时候API接口变更会导致前端页面报错。我习惯先用git diff对比新旧版本的API模块确认接口变化情况。

更多文章