Apache DolphinScheduler PostgreSQL 数据源接入指南:参数配置、插件依赖与底层原理
【免费下载链接】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 的 PostgreSQL 数据源展开,完整讲解在 Web 界面中创建 PostgreSQL 数据源所需的每一项参数含义,说明该数据源插件为何默认不随二进制包提供、以及如何通过插件依赖安装将其激活。阅读并动手实践后,你将能够独立完成 PostgreSQL 数据源的创建、连接校验与任务使用,并理解数据源插件在源码层面的构建与连接原理。
PostgreSQL 数据源在 DolphinScheduler 中的定位
DolphinScheduler 通过「数据源中心」统一管理各类数据库连接,SQL、Procedure、DataX 等任务在执行时可以引用已创建的数据源,从而复用连接信息、避免在任务参数中重复暴露账号密码。PostgreSQL 是其中一类由独立插件承载的数据源类型,对应仓库中的插件模块为 dolphinscheduler-datasource-postgresql,其 Maven 插件标识为datasource.postgresql(见 pom.xml)。
从插件架构上看,PostgreSQL 数据源由以下几部分组成(均位于 postgresql 插件源码目录):
PostgreSQLDataSourceProcessor:参数 DTO 与连接参数之间的转换、JDBC 驱动与校验查询声明、真实连接的获取;PostgreSQLConnectionParam:继承BaseConnectionParam,承载最终连接所需的 user、password、address、database、jdbcUrl、driverClassName、validationQuery 等字段;PostgreSQLDataSourceParamDTO:承接前端表单数据,其getType()返回DbType.POSTGRESQL;PostgreSQLDataSourceChannel及对应的PostgrePooledSQLDataSourceClient/PostgreAdHocSQLDataSourceClient:分别提供池化连接(供执行任务使用)与临时连接(供界面测试连通性等场景使用)的创建入口。
创建 PostgreSQL 数据源:核心参数一览
在 DolphinScheduler 前端界面进入「数据源中心」,点击「创建数据源」,在类型下拉框中选择POSTGRESQL,即进入下述表单。原文档定义的核心参数及含义如下表所示:
| 参数(Datasource) | 说明(Description) |
|---|---|
| Datasource | 选择数据源类型为 POSTGRESQL。 |
| Datasource name | 输入数据源名称,供任务引用时识别。 |
| Description | 输入数据源的描述信息。 |
| IP/Host Name | 输入 PostgreSQL 服务的 IP 或主机名。 |
| Port | 输入 PostgreSQL 服务的端口,默认通常为 5432。 |
| Username | 设置 PostgreSQL 连接用户名。 |
| Password | 设置 PostgreSQL 连接密码。 |
| Database name | 输入 PostgreSQL 连接的数据库名。 |
| Jdbc connection parameters | PostgreSQL 连接的参数设置,以 JSON 格式填写。 |
其中「IP/Host Name」「Port」「Username」「Password」「Database name」五项构成了最基本的连接三要素(地址 + 账号 + 数据库),而「Jdbc connection parameters」是进阶选项,用于追加额外的 JDBC 连接属性,详见下一节。
Jdbc connection parameters:JSON 格式的高级连接参数
在填写连接参数时,可以按 JSON 格式补充额外的 JDBC 属性。以源码实现为准,PostgreSQLDataSourceProcessor.createConnectionParams 会先拼接出基础 JDBC URL:
jdbc:postgresql://{host}:{port}/{database}其中前缀jdbc:postgresql://定义于 DataSourceConstants。
当表单中填入了 JSON 格式的额外参数后,getJdbcUrl会调用transformOther将 JSON 的键值对转换为key1=value1&key2=value2的查询串拼接到 URL 末尾(见 PostgreSQLDataSourceProcessor.getJdbcUrl / transformOther),例如:
{ "connectTimeout": "10", "socketTimeout": "60", "stringtype": "unspecified" }最终生成的连接 URL 形如:
jdbc:postgresql://127.0.0.1:5432/dolphinscheduler?connectTimeout=10&socketTimeout=60&stringtype=unspecified这些参数最终会作用于 PostgreSQL JDBC 驱动的连接行为,可用于控制超时、字符类型处理、SSL 等连接属性。连接建立时,getConnection 通过JdbcDriverConnectionProvider使用声明的驱动类与上述 URL 完成真实连接的获取。
原生支持说明:为什么需要手动激活插件依赖
原文档在「Native Supported」一节明确指出:PostgreSQL 数据源默认不随二进制发行包原生提供,需要读者参考伪集群部署文档的「Download Plugins Dependencies」章节来激活该数据源。
这是因为从 3.3.0 版本起,DolphinScheduler 二进制发行包不再内置插件依赖,需要用户按需自行下载。激活 PostgreSQL 数据源的推荐方式是使用安装脚本,在发行包根目录执行:
bash ./bin/install-plugins.sh 3.3.0脚本会将版本号作为参数,通过 Mavendependency:get拉取指定版本的插件(见 install-plugins.sh)。如果只希望安装部分插件,可以在conf/plugins_config中按需裁剪;仓库中对应配置样例为 config/plugins_config,其中--datasource-plugins--段落已包含dolphinscheduler-datasource-postgresql这一行,即表示该数据源插件属于可选的数据源插件集合:
--datasource-plugins-- ... dolphinscheduler-datasource-postgresql ... --end--提示:插件依赖包通常不包含在二进制发行包内。如果启动服务或使用数据源时出现
ClassNotFoundException,请先检查对应插件类型的依赖是否缺失。PostgreSQL 数据源插件的驱动依赖为org.postgresql:postgresql(见 pom.xml),即 PostgreSQL JDBC Driver。
源码级的连接细节与行为说明
驱动与校验查询
PostgreSQL 数据源插件声明的 JDBC 驱动类与连接校验查询均定义在数据源 API 常量中:
- 驱动类:
org.postgresql.Driver(DataSourceConstants.ORG_POSTGRESQL_DRIVER); - 校验查询:
select version()(DataSourceConstants.POSTGRESQL_VALIDATION_QUERY),用于连接池健康检查。
密码加密存储
创建数据源时,密码不会以明文写入数据库:createConnectionParams中通过PasswordUtils.encodePassword对密码进行加密后再存入连接参数(见 PostgreSQLDataSourceProcessor.createConnectionParams),获取连接时再使用PasswordUtils.decodePassword解密(见 PostgreSQLDataSourceProcessor.getConnection),保证凭据的落盘安全。
两种连接获取方式
PostgreSQLDataSourceChannel定义了两种客户端创建入口(见 PostgreSQLDataSourceChannel.java):
createAdHocDataSourceClient:创建PostgreAdHocSQLDataSourceClient,用于一次性/临时的查询场景;createPooledDataSourceClient:创建PostgrePooledSQLDataSourceClient,用于任务执行等高频率使用场景,通过连接池复用连接、降低建连开销。
兼容 PostgreSQL 特性的 SQL 拆分
PostgreSQL 支持以$tag$ ... $tag$形式书写的美元引用(dollar-quoted)字符串,函数体、存储过程等内容常依赖该语法。PostgreSQLDataSourceProcessor.splitAndRemoveComment在按分号拆分多条 SQL 时,会先借助 Druid 解析器去除注释,再通过splitSqlRespectingDollarQuotes识别$...$包裹的块,确保美元引用内的分号不会被误判为语句分隔符(见 PostgreSQLDataSourceProcessor.splitAndRemoveComment)。这意味着在使用 SQL 任务执行含函数定义等多语句脚本时,拆分结果能保持 PostgreSQL 语义正确。
实践建议与常见问题
- 创建前先确认插件已激活:若界面「数据源中心」的创建列表中找不到 POSTGRESQL 类型,说明插件依赖尚未安装,请先按上文「原生支持说明」执行
install-plugins.sh并重启相关服务。 - 连通性测试:创建数据源时界面提供的连通性测试走临时连接通道(
PostgreAdHocSQLDataSourceClient),而任务执行走池化连接通道(PostgrePooledSQLDataSourceClient),两者都应保证目标主机与端口在网络层面可达。 - 连接参数的使用场景:当需要设置超时、SSL 或特殊类型映射等驱动级属性时,优先通过「Jdbc connection parameters」的 JSON 配置完成,无需修改任务脚本。
- 密码安全:数据源密码在落库前会经过加密处理,任务侧引用数据源时无需也无法直接读取明文密码。
小结
通过本文,你已经掌握了 Apache DolphinScheduler 中 PostgreSQL 数据源从「界面参数填写」到「插件依赖激活」再到「源码级连接原理」的完整链路:核心参数(类型、名称、主机、端口、账号、密码、数据库、JSON 连接参数)决定了连接的基础信息;install-plugins.sh与plugins_config决定了插件能否被加载;而 PostgreSQLDataSourceProcessor 在幕后负责 JDBC URL 组装、密码加解密、驱动加载、校验查询与兼容 PostgreSQL 的 SQL 拆分。据此即可在实际环境中顺利接入 PostgreSQL,并让 SQL 等任务安全复用该数据源。
【免费下载链接】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),仅供参考