Skip to content

Conversation

Ice2Faith
Copy link

  • [build] 数据源打包剔除JDBC驱动
  • [docs] 更新 README.md 说明

从打包结果中剔除JDBC驱动,同时打包为release产物,支持直接下载
更新插件使用说明,即直接下载release产物放到nacos目录的plugins目录下即可
不再需要拉取源代码编译,也可以自己直接更换或者升级JDBC驱动版本,而不必源码更新JDBC驱动版本再打包

@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Ice2Faith seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

Copy link

lingma-agents bot commented Aug 12, 2025

数据源插件优化:JDBC驱动解耦与打包机制改进

变更概述
  • 新功能

    • 引入了新的打包脚本 (collect.bat),用于自动化收集插件构建产物到指定目录,便于发布和部署。
    • 新增 .gitignore 文件,管理 backupdeploy 目录的版本控制忽略规则。
  • 重构

    • 将各数据库插件(达梦、金仓、MSSQL、OpenGauss、Oracle、PostgreSQL)中的 JDBC 驱动依赖范围设置为 provided 并标记为 optional,实现 JDBC 驱动与插件的解耦。
    • 在各插件的 pom.xml 中添加 maven-dependency-plugin 插件配置,支持将 JDBC 驱动单独打包或排除。
    • 在根 pom.xml 中统一管理 maven-dependency-plugin 的插件配置,通过 pluginManagement 实现插件配置的标准化和复用。
  • 问题修复

    • 修改 Kingbase 和 Gaussdb 数据库方言类,增加对数据库函数的支持,提升 SQL 兼容性。
  • 文档

    • 更新 README.md 文件,详细说明插件的两种使用方式(依赖引入和插件加载),并明确指出需要手动放置 JDBC 驱动 jar 包到 plugins 目录。
  • 配置调整

    • 各数据库插件 pom.xml 中新增 copy-lib.artifact-ids 属性,用于指定需要单独处理的 JDBC 驱动 artifact ID。
变更文件
文件路径 变更说明
nacos-datasource-plugin-ext/​README.​md 更新插件使用说明,详细描述了两种插件引入方式,并强调了手动放置 JDBC 驱动的必要性。
nacos-datasource-plugin-ext/​bash/​.​gitignore 新增 `.gitignore` 文件,用于忽略 `backup` 和 `deploy` 目录。
nacos-datasource-plugin-ext/​bash/​collect.​bat 新增 Windows 批处理脚本,用于自动化收集插件构建产物。
nacos-datasource-plugin-ext/​nacos-dm-datasource-plugin-ext/​pom.​xml 将达梦 JDBC 驱动依赖范围设置为 `provided` 和 `optional`,并添加 `maven-dependency-plugin` 配置。
nacos-datasource-plugin-ext/​nacos-kingbase-datasource-plugin-ext/​pom.​xml 将金仓 JDBC 驱动依赖范围设置为 `provided` 和 `optional`,并添加 `maven-dependency-plugin` 配置。
nacos-datasource-plugin-ext/​nacos-kingbase-datasource-plugin-ext/​src/​main/​java/​com/​alibaba/​nacos/​plugin/​datasource/​dialect/​KingbaseDatabaseDialect.​java 增加对数据库函数的支持,提升 SQL 兼容性。
nacos-datasource-plugin-ext/​nacos-mssql-datasource-plugin-ext/​pom.​xml 将 MSSQL JDBC 驱动依赖范围设置为 `provided` 和 `optional`,并添加 `maven-dependency-plugin` 配置。
nacos-datasource-plugin-ext/​nacos-opengauss-datasource-plugin-ext/​pom.​xml 将 OpenGauss JDBC 驱动依赖范围设置为 `provided` 和 `optional`,并添加 `maven-dependency-plugin` 配置。
nacos-datasource-plugin-ext/​nacos-opengauss-datasource-plugin-ext/​src/​main/​java/​com/​alibaba/​nacos/​plugin/​datasource/​dialect/​GaussdbDatabaseDialect.​java 增加对数据库函数的支持,提升 SQL 兼容性。
nacos-datasource-plugin-ext/​nacos-oracle-datasource-plugin-ext/​pom.​xml 将 Oracle JDBC 驱动依赖范围设置为 `provided` 和 `optional`,并添加 `maven-dependency-plugin` 配置。
nacos-datasource-plugin-ext/​nacos-postgresql-datasource-plugin-ext/​pom.​xml 将 PostgreSQL JDBC 驱动依赖范围设置为 `provided` 和 `optional`,并添加 `maven-dependency-plugin` 配置。
pom.xml 统一管理 `maven-dependency-plugin` 配置,并添加 `ServicesResourceTransformer` 支持。

💡 小贴士

与 lingma-agents 交流的方式

📜 直接回复评论
直接回复本条评论,lingma-agents 将自动处理您的请求。例如:

  • 在当前代码中添加详细的注释说明。

  • 请详细介绍一下你说的 LRU 改造方案,并使用伪代码加以说明。

📜 在代码行处标记
在文件的特定位置创建评论并 @lingma-agents。例如:

  • @lingma-agents 分析这个方法的性能瓶颈并提供优化建议。

  • @lingma-agents 对这个方法生成优化代码。

📜 在讨论中提问
在任何讨论中 @lingma-agents 来获取帮助。例如:

  • @lingma-agents 请总结上述讨论并提出解决方案。

  • @lingma-agents 请根据讨论内容生成优化代码。

Copy link

@lingma-agents lingma-agents bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔎 代码评审报告

🎯 评审意见概览
严重度 数量 说明
🔴 Blocker 0 阻断性问题,需立即修复。例如:系统崩溃、关键功能不可用或严重安全漏洞。
🟠 Critical 1 严重问题,高优先级修复。例如:核心功能异常或性能瓶颈影响用户体验。
🟡 Major 1 主要问题,建议修复。例如:非核心功能缺陷或代码维护性较差。
🟢 Minor 2 次要问题,酬情优化。例如:代码格式不规范或注释缺失。

总计: 4 个问题

📋 评审意见详情
💡 代码实现建议
以下是文件级别的代码建议,聚焦于代码的可读性、可维护性和潜在问题。
🪟 nacos-datasource-plugin-ext/bash/collect.bat (2 💬)
☕ nacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/KingbaseDatabaseDialect.java (1 💬)
☕ nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/GaussdbDatabaseDialect.java (1 💬)
🚀 架构设计建议
以下是对代码架构和设计的综合分析,聚焦于跨文件交互、系统一致性和潜在优化空间。
🔍1. JDBC驱动解耦策略导致的潜在依赖管理复杂性增加

通过将JDBC驱动设置为provided和optional,虽然实现了驱动版本的解耦,允许用户自定义驱动版本,但这增加了用户在部署时的复杂性。用户需要手动确保JDBC驱动与数据源插件的兼容性,否则可能导致运行时错误。此外,这种策略在多数据源场景下可能引发版本冲突问题。建议在README中提供更详细的兼容性检查指南,并考虑提供自动化工具或脚本来验证驱动与插件的兼容性。

📌 关键代码

<scope>provided</scope>
            <optional>true</optional>
- 这样做的目的是为了将 JDBC 驱动进行解耦,以便于你可以选择自己更合适的 JDBC 驱动版本
  - 而不是插件里面直接合并的驱动版本

⚠️ 潜在风险

用户可能因驱动版本不兼容导致系统运行异常,增加部署和维护成本。

🔍2. 批处理脚本中的健壮性和效率问题

collect.bat脚本在执行目录操作时缺乏必要的错误检查和处理机制,如目标目录存在性检查和删除操作的原子性保证。此外,脚本中存在冗余的目录删除操作,可能影响执行效率。建议优化脚本逻辑,增加错误处理机制,并移除冗余操作以提高脚本的健壮性和执行效率。

📌 关键代码

mkdir %dst_path%
mkdir .\backup

rd /q /s .\backup
move /Y %dst_path% .\backup

rd /q /s %dst_path%
mkdir %dst_path%

⚠️ 潜在风险

脚本执行失败可能导致数据丢失或部署中断,影响系统的稳定性和可用性。

🔍3. 数据库方言实现中的代码复用问题

KingbaseDatabaseDialect直接复用了MySQL的函数枚举类TrustedMysqlFunctionEnum,这可能导致数据库方言实现的不准确性和潜在的兼容性问题。建议为Kingbase数据库创建独立的函数枚举类,以确保方言实现的准确性和可维护性。

📌 关键代码

import com.alibaba.nacos.plugin.datasource.enums.mysql.TrustedMysqlFunctionEnum;
return TrustedMysqlFunctionEnum.getFunctionByName(functionName);

⚠️ 潜在风险

数据库方言实现不准确可能导致SQL执行错误,影响数据源插件的稳定性和数据一致性。

🔍4. Maven插件配置的重复性和维护性问题

在多个数据源插件的pom.xml文件中重复配置了maven-dependency-plugin,这增加了配置的重复性和维护难度。建议将插件配置提取到父POM中,通过pluginManagement进行统一管理,以减少重复配置并提高维护效率。

📌 关键代码

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

⚠️ 潜在风险

配置重复可能导致维护困难和配置不一致,增加项目管理的复杂性。

审查详情
📒 文件清单 (12 个文件)
新增: 2 个文件
📝 变更: 10 个文件

✅ 新增文件:

  • nacos-datasource-plugin-ext/bash/.gitignore
  • nacos-datasource-plugin-ext/bash/collect.bat

📝 变更文件:

  • nacos-datasource-plugin-ext/README.md
  • nacos-datasource-plugin-ext/nacos-dm-datasource-plugin-ext/pom.xml
  • nacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/pom.xml
  • nacos-datasource-plugin-ext/nacos-kingbase-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/KingbaseDatabaseDialect.java
  • nacos-datasource-plugin-ext/nacos-mssql-datasource-plugin-ext/pom.xml
  • nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/pom.xml
  • nacos-datasource-plugin-ext/nacos-opengauss-datasource-plugin-ext/src/main/java/com/alibaba/nacos/plugin/datasource/dialect/GaussdbDatabaseDialect.java
  • nacos-datasource-plugin-ext/nacos-oracle-datasource-plugin-ext/pom.xml
  • nacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/pom.xml
  • pom.xml

💡 小贴士

与 lingma-agents 交流的方式

📜 直接回复评论
直接回复本条评论,lingma-agents 将自动处理您的请求。例如:

  • 在当前代码中添加详细的注释说明。

  • 请详细介绍一下你说的 LRU 改造方案,并使用伪代码加以说明。

📜 在代码行处标记
在文件的特定位置创建评论并 @lingma-agents。例如:

  • @lingma-agents 分析这个方法的性能瓶颈并提供优化建议。

  • @lingma-agents 对这个方法生成优化代码。

📜 在讨论中提问
在任何讨论中 @lingma-agents 来获取帮助。例如:

  • @lingma-agents 请总结上述讨论并提出解决方案。

  • @lingma-agents 请根据讨论内容生成优化代码。

mkdir .\backup

rd /q /s .\backup
move /Y %dst_path% .\backup
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

批处理脚本在移动目录前未检查目标目录是否存在。

🟡 Major | 🐞 Bugs

📋 问题详情

在执行move /Y %dst_path% .�ackup之前没有检查%dst_path%目录是否存在,如果该目录不存在,move命令会报错。应该先检查目录是否存在再执行移动操作。

💡 解决方案

在移动目录前添加条件判断以避免错误。

- move /Y %dst_path% .\backup
+ if exist %dst_path% move /Y %dst_path% .\backup

您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)

有用意见👍无用意见👎错误意见❌

rd /q /s .\backup
move /Y %dst_path% .\backup

rd /q /s %dst_path%
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

批处理脚本中存在冗余的目录删除操作。

🟢 Minor | 🧹 Code Smells

📋 问题详情

脚本中第21行和第18行都执行了rd命令删除%dst_path%目录,这会造成不必要的重复操作,并且如果第一次删除失败,第二次也会失败。应该移除其中一次删除操作以提高脚本效率和清晰度。

💡 解决方案

移除第18行的冗余目录删除命令。

- rd /q /s %dst_path%

您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)

有用意见👍无用意见👎错误意见❌


@Override
public String getFunction(String functionName) {
return TrustedMysqlFunctionEnum.getFunctionByName(functionName);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

应使用与Kingbase数据库相关的函数枚举类,而不是复用MySQL的函数枚举。

🟠 Critical | 🐞 Bugs

📋 问题详情

getFunction方法中直接调用了TrustedMysqlFunctionEnum.getFunctionByName(functionName),这是不合适的,因为Kingbase数据库可能不支持所有MySQL函数,或者有自己特定的函数实现。应该使用Kingbase专用的函数枚举类来提供正确的函数映射。

💡 解决方案

修改getFunction方法中的函数获取逻辑,使其使用Kingbase专用的函数枚举类。

- return TrustedMysqlFunctionEnum.getFunctionByName(functionName);
+ return KingbaseFunctionEnum.getFunctionByName(functionName);

您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)

有用意见👍无用意见👎错误意见❌

package com.alibaba.nacos.plugin.datasource.dialect;

import com.alibaba.nacos.plugin.datasource.constants.DatabaseTypeConstant;
import com.alibaba.nacos.plugin.datasource.impl.enums.GaussdbFunctionEnum;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

类注释描述不准确,应更新为反映实际数据库类型。

🟢 Minor | 🧹 Code Smells

📋 问题详情

该类的注释仍然标注为'PostgreSQL database dialect',但实际上它用于GaussDB/OpenGauss数据库。这种误导性的注释可能导致开发者对数据库方言的理解产生混淆。

💡 解决方案

更新类注释以准确反映其用途。

-  * PostgreSQL database dialect.
+  * GaussDB/OpenGauss database dialect.

您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)

有用意见👍无用意见👎错误意见❌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants