Apache DolphinScheduler DB2 数据源接入指南:参数配置、插件激活与底层实现解析
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
导读
本文围绕 Apache DolphinScheduler 中DB2 数据源的接入与使用展开,完整覆盖数据源创建表单中每一项参数的语义与填写建议,并给出 DB2 数据源插件在 3.3.0 之后二进制发行包中的激活方式(install-plugins.sh+plugins_config)。同时结合仓库内dolphinscheduler-datasource-db2插件的真实源码与单元测试,剖析 JDBC URL 的拼接规则、连接参数模型与校验查询语句,帮助读者从"会填表单"深入到"理解底层连接如何被构建",为实际部署与排障提供依据。
DB2 数据源在 DolphinScheduler 中的定位
DolphinScheduler 采用"数据源插件化"设计:每种数据库对应一个独立的dolphinscheduler-datasource-*模块,通过 SPI(@AutoService)机制注册到数据源 API 层。DB2 数据源的实现位于 dolphinscheduler-datasource-db2,其模块名由 pom.xml 中的<plugin.name>datasource.db2</plugin.name>声明,构建时通过maven-shade-plugin打成独立插件 Jar。
该插件以DbType.DB2作为类型标识(见 Db2DataSourceParamDTO.java),统一交由数据源 API 层调度,因此 DB2 与 MySQL、PostgreSQL 等数据源在 DolphinScheduler 的 SQL 任务、数据源管理界面中的使用方式完全一致。
数据源参数详解
在 DolphinScheduler Web UI 的"数据源中心"中,数据源类型选择DB2后,需要填写以下参数(对应官方文档 db2.md):
| 参数 | 说明 |
|---|---|
| Datasource | 数据源类型,选择 DB2。 |
| Datasource Name | 数据源名称,在项目中唯一标识该数据源。 |
| Description | 数据源描述,便于团队维护与识别。 |
| IP/Host Name | DB2 服务所在的主机 IP 或主机名。 |
| Port | DB2 服务监听端口。 |
| Username | 连接 DB2 的用户名。 |
| Password | 连接 DB2 的用户密码。 |
| Database Name | 要连接的 DB2 数据库名称。 |
| jdbc connect parameters | DB2 连接的附加参数,以 JSON 格式填写。 |
界面截图可参考 docs/img/new_ui/dev/datasource/DB2.png。
附加参数(jdbc connect parameters)如何生效
表单中的 JSON 参数对应源码里的other字段(见 Db2ConnectionParam.java)。在构建 JDBC 连接时,Db2DataSourceProcessor.java 的transformOther方法会把 JSON 键值对转换为key=value形式,并用分号;连接,追加到 JDBC URL 末尾。
例如填写:
{"currentSchema":"TESTSCHEMA","sslConnection":"true"}最终生成的 JDBC URL 为:
jdbc:db2://<host>:<port>/<database>:currentSchema=TESTSCHEMA;sslConnection=true这一行为由单元测试 Db2DataSourceProcessorTest.java#L80-L89 明确验证:当other中传入{"other":"other"}时,期望的 JDBC URL 为jdbc:db2://localhost:5142/default:other=other。
JDBC URL 与连接参数模型(源码级)
DB2 数据源连接的完整参数由Db2ConnectionParam(继承自BaseConnectionParam)承载,包含address、database、jdbcUrl、user、password、driverClassName、validationQuery、other等字段。从 Db2DataSourceProcessor.java#L68-L85 可以看到 URL 的拼接逻辑:
String address = String.format("%s%s:%s", DataSourceConstants.JDBC_DB2, db2Param.getHost(), db2Param.getPort()); String jdbcUrl = String.format("%s/%s", address, db2Param.getDatabase());对应到常量定义(见 DataSourceConstants.java),即:
JDBC URL = jdbc:db2://<host>:<port>/<database>驱动类与校验查询
DB2 数据源使用的驱动与校验语句同样定义在DataSourceConstants中:
| 常量 | 值 | 用途 |
|---|---|---|
COM_DB2_JDBC_DRIVER | com.ibm.db2.jcc.DB2Driver | DB2 JDBC 驱动类名 |
JDBC_DB2 | jdbc:db2:// | JDBC URL 前缀 |
DB2_VALIDATION_QUERY | select 1 from sysibm.sysdummy1 | 连接池校验查询语句 |
其中select 1 from sysibm.sysdummy1是 DB2 官方推荐的连接有效性探测语句,在 Db2DataSourceProcessor.java#L129-L132 中通过getValidationQuery()返回,由 Db2DataSourceProcessorTest.java#L96-L99 断言验证。
SQL 解析支持
Db2DataSourceProcessor重写了splitAndRemoveComment方法(见 Db2DataSourceProcessor.java#L134-L138),借助 Alibaba Druid 的 SQL 解析器按 DB2 方言对 SQL 进行注释剔除与语句切分,保证多语句 SQL 任务在 DB2 上可以正确执行。
连接通道与密码处理
连接的真实建立由DB2DataSourceChannel完成(见 DB2DataSourceChannel.java),它按场景提供两种客户端:
createAdHocDataSourceClient:临时(即席)连接客户端,适用于一次性 SQL 执行;createPooledDataSourceClient:池化连接客户端,适用于频繁复用的数据源场景。
该通道由DB2DataSourceChannelFactory(DB2DataSourceChannelFactory.java)通过@AutoService(DataSourceChannelFactory.class)注册,并以DbType.DB2的名称对外暴露。
在 Db2DataSourceProcessor.java#L107-L117 的getConnection方法中可以看到:密码存储时经PasswordUtils.encodePassword加密(L79),使用时再通过PasswordUtils.decodePassword解密,随后交给JdbcDriverConnectionProvider完成真正的连接建立。
激活 DB2 数据源插件(Native Supported 说明)
官方文档明确标注 DB2 数据源Native Supported: No,即二进制发行包默认不内置 DB2 连接所需的驱动与插件依赖,需要手动激活。激活方式在 pseudo-cluster.md 的Download Plugins Dependencies一节中有详细说明。
背景:3.3.0 起插件依赖独立下载
从 DolphinScheduler 3.3.0 开始,二进制包不再附带插件依赖,需要用户自行下载。官方提供一键安装脚本:
bash ./bin/install-plugins.sh 3.3.0该脚本会根据 config/plugins_config 中的插件清单,从 Maven 中央仓库拉取对应版本的插件依赖包。
按需裁剪插件清单
通常不需要安装全部连接器插件,可以通过修改conf/plugins_config只保留所需插件。以仅保留 DB2 数据源插件为例,plugins_config的--datasource-plugins--段只需保留:
--datasource-plugins-- dolphinscheduler-datasource-db2 --end--仓库根目录的 config/plugins_config 展示了完整的--datasource-plugins--段,其中默认已包含dolphinscheduler-datasource-db2条目(第 44 行),其他数据源插件可按需取舍。
排障提示
Note:插件依赖包通常不包含在二进制包中。如果启动服务时遇到
ClassNotFoundException异常,请检查对应插件类型的依赖包是否缺失。对于 DB2 数据源,典型缺失项即 IBM DB2 JDBC 驱动com.ibm.db2.jcc.DB2Driver(对应db2jcc系列驱动 Jar),需确保其已被install-plugins.sh正确安装。
在任务中使用 DB2 数据源
激活插件并在"数据源中心"创建 DB2 数据源后,即可在 SQL 任务(dolphinscheduler-task-sql)中选择该数据源编写 SQL。由于数据源 API 层对插件做了统一抽象,DB2 与项目内其他数据源(MySQL、PostgreSQL、Oracle 等,参见 dolphinscheduler-datasource-all)的使用方式完全一致,SQL 解析、连接复用、密码加解密等能力开箱即用。
总结
- 创建数据源:在数据源中心选择 DB2,填写主机、端口、用户名、密码、数据库名,附加参数以 JSON 形式追加到 JDBC URL(以
;分隔键值对); - 激活插件:DB2 数据源非 Native 支持,3.3.0 起需在 config/plugins_config 中保留
dolphinscheduler-datasource-db2,并执行bash ./bin/install-plugins.sh <版本号>安装依赖; - 底层机制:JDBC URL 由
jdbc:db2://host:port/database拼装,驱动为com.ibm.db2.jcc.DB2Driver,校验语句为select 1 from sysibm.sysdummy1,密码加密存储、解密使用,具体实现可参见 Db2DataSourceProcessor.java 及配套单元测试。
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考