GitHub user aymansalkhatib added a comment to the discussion: 问题反馈-文档无法复现-部署seata2.6.0+nacos+db模式失败
你的 Seata 配置本身没有问题,原因在于 **Nacos 服务端版本**。从你的截图可以看到 Nacos 是 **3.2.2**,而 Seata 2.6.0 与它不兼容。 ### 原因 1. Seata 2.6.0 内置的 Nacos 客户端是 **nacos-client 1.4.6**(见 [`dependencies/pom.xml` 第 60 行](https://github.com/apache/incubator-seata/blob/v2.6.0/dependencies/pom.xml#L60))。1.x 客户端通过 **v1 HTTP API**(如 `/nacos/v1/cs/configs`)读取配置和注册服务。 2. 从 **Nacos 3.2.0** 开始,v1/v2 HTTP API **已从默认服务端发行包中移除**,迁移到了独立的兼容插件 [nacos-api-legacy-adapter](https://github.com/nacos-group/nacos-api-legacy-adapter)(见 Nacos 仓库中的 `specs/zh-cn/design/compatibility-deprecation-spec.md` 第 10 节 "Legacy HTTP API Adapter")。 3. 因此 Seata 无法从 Nacos 读取 `seataServer.properties`,`store.db.datasource` 的值为空。`DataBaseLockManager` 按这个值加载 `DataSourceProvider` 时就报出: ``` the name of service provider for [org.apache.seata.core.store.db.DataSourceProvider] name is null ``` 也就是说,并不是 `druid` 配置写错了,而是这项配置**根本没有被读到**。 所以即使完全按照文档配置,只要 Nacos 服务端是 3.2 及以上版本,就会出现这个错误。 ### 解决方法(任选其一) **方案 1:给 Nacos 3.2.2 安装兼容插件(保留现有 Nacos)** - 按 [nacos-api-legacy-adapter 说明](https://github.com/nacos-group/nacos-api-legacy-adapter/blob/main/README_CN.md) 构建与服务端版本一致的 jar(`pom.xml` 中的 `nacos.version` 必须改为 `3.2.2`),然后放到 Nacos 的 `plugins` 目录(或 classpath)中,重启 Nacos。无需修改代码或配置,jar 存在即生效。 - 注意:官方说明该插件仅用于过渡期,后续版本不保证继续支持。 **方案 2:使用 Nacos 2.x(最简单,与文档一致)** 将 Nacos 换成 2.x 版本(例如 2.5.x),2.x 服务端仍支持 1.x 客户端的 v1 API。Seata 与业务服务都无需改动。 **方案 3:Seata 暂时不使用 Nacos 作为配置中心** 把 `seata.config.type` 改为 `file`,并直接在 `application.yml` 的 `seata.store` 下写数据库配置(你已经写好了)。但注意:**注册中心** `seata.registry.type: nacos` 同样依赖 v1 API,在 Nacos 3.2.2 上也会失败,所以这个方案还需要配合方案 1,或者把注册中心也改为 `file`。 ### 验证 修复后重启容器,启动日志中不应再出现 `DataSourceProvider name is null`。在 Nacos 控制台的 **服务管理 → 服务列表**(命名空间 `seata-server`)中应能看到 `seata-server` 实例。 GitHub link: https://github.com/apache/incubator-seata/discussions/8152#discussioncomment-18923106 ---- This is an automatically sent email for [email protected]. To unsubscribe, please send an email to: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
