一、概述
最近在整理依赖,原本用的springcloud提供的nacos,看到老早都不更新了,而且有些包冲突,就换了ali的,用的spring-boot版本是2.3.9.RELEASE,对应spring-cloud版本是Hoxton.SR12,dubbo用的apache的2.7.11,nacos用的alibaba-cloud的2.2.6.RELEASE
二、问题
用yml配置的nacos-config,但是运行还是用的默认值
2023-11-30 17:06:34.027 WARN 36900 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[zl-system] & group[DEFAULT_GROUP]
三、原因
debug发现,配置均为null
一步步找,发现这个类是优先加载,并且通过反射创建的时候,参数就是个空,可是yml明明配置了,并且其他服务都能读取,觉得可能是这个类的加载在读取yml之前。于是查文档
https://github.com/alibaba/spring-cloud-alibaba/pull/2349
发现要用bootstrap。。。不想用,于是配置spring.config.import,发现该属性需要SpringBoot 2.4以上版本。。。
四、解决
spring-boot版本升级到2.4.12,对应spring-cloud版本是2020.0.4,对应的 spring cloud alibaba 版本
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
nacos选择2021.1,dubbo选择2.7.23(3.x会少包,可能不兼容吧,以后再升级了)(还得单独加个spring-context-support 1.0.11)。由于spring-cloud 2020版本以后,就移除了ribbon负载均衡器,官方推荐使用Spring Cloud Loadbalancer替换Ribbon,又加了个spring-cloud-starter-loadbalancer。都弄好后,发现application.yml的nacos.config并没有读,nacos就是要用bootstrap.yml优先配置,而且bootstrap本身也是引导的意思。。虽然可以强行改成加载application.yml,但是我妥协了,没必要非得对着干。