YunaiV / yudao-cloud

ruoyi-vue-pro 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城、CRM、ERP、AI 大模型等功能。你的 ⭐️ Star ⭐️,是作者生发的动力!
https://cloud.iocoder.cn
MIT License
16.39k stars 4.02k forks source link

当将数据库相关的配置内容迁移至Nacos的配置文件中心时会出现'DbType'无法正常初始化的错误。 #133

Closed andriyhuang closed 8 months ago

andriyhuang commented 8 months ago

碰到问题,请在 https://github.com/YunaiV/yudao-cloud/issues 搜索是否存在相似的 issue。

不按照模板提交的 issue,会被系统自动删除。

基本信息

你猜测可能的原因

(必填)我花费了 2-4 小时自查,发现可能的原因是:经调试发现如果spring.datasource.dynamic.primaryspring.datasource.dynamic.datasource.url两个参数配置迁移至Nacos的配置中心后,导致cn.iocoder.yudao.framework.mybatis.config.IdTypeEnvironmentPostProcessor类的postProcessEnvironment方法被执行时还未初始化执行Nacos的配置加载方法,即com.alibaba.cloud.nacos.client.NacosPropertySourceLocator的执行优先级在SpringBoot初始化的时候非常低。postProcessEnvironment方法在第一次执行时是加载本地的bootstrap.yaml文件,第二次执行时是本地的application.yaml文件,最后才会是Nacos的初始化加载远程配置服务工作,从而影响到了yudao-spring-boot-start-mybatis组件初始化DbType时的逻辑,进而影响到后续数据库ID字段类型和尾行查询的处理方法。

复现步骤

第一步, 将spring.datasource.dynamic相关的配置全部迁移至Nacos配置服务中心。

第二步, 移除模块中本地所有的application.yaml相关的配置文件,只保留bootstrap.yaml基础配置内容。

第三步, 启动项目调试,会发现cn.iocoder.yudao.framework.mybatis.config.IdTypeEnvironmentPostProcessor类中执行postProcessEnvironment方法调用getDbType方法获取数据库类型时无法正常读取到primaryurl两个属性的配置。

报错信息

带上必要的截图

YunaiV commented 8 months ago

https://cloud.iocoder.cn/config-center/#_1-2-%E9%A1%B9%E7%9B%AE%E6%8E%A5%E5%85%A5-nacos