最近在做老系统升级(springboot2+dubbo2.7.1+zookeeper+nacos-config),去掉zookeeper的注册中心,替换成nacos2.1版本(阿里云已经不支持1.X版本了)-对应的需要升级springboot和dubbo3。最终升级完成了,其中遇到的诸多问题,能记住多少就总结多少
  有在升级过程中,遇到问题的小伙伴,欢迎交流。

问题

springboot:2.3.1,nacos:2.1,nacos-config-spring-boot-starter:0.2.10
springboot nacos2.1 config获取不到配置信息,报错


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'yamlReadBean': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'dubbo.scan.base-packages' in value "${dubbo.scan.base-packages}"
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE]

这个报错只是获取不到配置信息,但是确实有配置,
从springboot启动日志查找发现
在这里插入图片描述

解决

其实,就是按照日志查,可能会出现的问题
然后去查了下源码:NacosConfigApplicationContextInitializer

public void initialize(ConfigurableApplicationContext context) {
        this.singleton.setApplicationContext(context);
        this.environment = context.getEnvironment();
        this.nacosConfigProperties = NacosConfigPropertiesUtils.buildNacosConfigProperties(this.environment);
        NacosConfigLoader configLoader = new NacosConfigLoader(this.nacosConfigProperties, this.environment, this.builder);
        if (!this.enable()) {
            this.logger.info("[Nacos Config Boot] : The preload configuration is not enabled");
        } else if (this.processor.enable()) {
            this.processor.publishDeferService(context);
            configLoader.addListenerIfAutoRefreshed(this.processor.getDeferPropertySources());
        } else {
            configLoader.loadConfig();
            configLoader.addListenerIfAutoRefreshed();
        }

        ConfigurableListableBeanFactory factory = context.getBeanFactory();
        if (!factory.containsSingleton("globalNacosProperties")) {
            factory.registerSingleton("globalNacosProperties", configLoader.buildGlobalNacosProperties());
        }

    }

    private boolean enable() {
        return this.processor.enable() || this.nacosConfigProperties.getBootstrap().isEnable();
    }

去看下配置,有一个成员变量是有bootstarp的属性,然后yaml文件试了一下,需要配置的是nacos.config bootstrap.enable=true,就好了
在这里插入图片描述

完成yaml配置

nacos:
  config:
    server-addr: ip:8848
    namespace: 2c047fc5-bcf4-47eb-a9ce-f8ef353c49e4
    bootstrap:
      enable: true
    type: yaml
    data-id: xxx-xxx-provider
    auto-refresh: true


GitHub 加速计划 / na / nacos
29.83 K
12.75 K
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:3 个月前 )
4334cd16 * Support custom client configuration timeout.(#12748) * Add UT.(#12748) 12 天前
b04d2266 16 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐