alibaba/spring-cloud-alibaba

Nacos配置中心 无法加载配置

Opened this issue · 12 comments

Spring Cloud Alibaba 2023.0.1.3
Spring Cloud 2023.0.3.
Spring Boot 3.2.11
JDK21
spring-cloud-starter-alibaba-nacos-config 2023.0.1.3

nacos 配置中心的配置加载不到

2023.0.1.3取消了默认拉取配置方式需要采用spring-config.import来拉取的配置

spring.config.import[0]=nacos:${spring.application.name}
spring.config.import[1]=nacos:${spring.application.name}.properties

@Comven 我试了,还是不行,加载不到 nacos 里面的配置。
另外,com.alibaba.cloud.nacos.NacosConfigProperties 这个类的 @ConfigurationProperties(NacosConfigProperties.PREFIX) 为什么要去掉呢?

检查一下nacos的配置名称是否跟spring-config.import的一样,还有配置中心的namespace也必须配置,虽然现在在2023.0.1.3版本会报警告。

关于那个类移除的问题,有其他人反馈了,等待后边正式发布看是否修复。你看下这几个issue吧 #3898 #3882

谢谢 @Comven 解决了,需要按照如下方式配置方可读取到数据。我个人感觉配置起来还是相对比较麻烦的,不够友好。

spring.config.import[0]=nacos:application.properties?refresh=true
spring.config.import[1]=nacos:${spring.application.name}.properties?refresh=true

spring.cloud.nacos.config.server-addr=172...19:8848
spring.cloud.nacos.config.fileExtension=properties
spring.cloud.nacos.config.namespace=0b6f9df0-*********-260a83726ff5

spring.cloud.nacos.config.shared-configs[0].data-id=${spring.application.name}.properties
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true

spring.cloud.nacos.config.shared-configs[1].data-id=application.properties
spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[1].refresh=true

spring.cloud.nacos.config.shared-configs[0].data-id=${spring.application.name}.properties
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true

spring.cloud.nacos.config.shared-configs[1].data-id=application.properties
spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[1].refresh=true

shared-configs 已经不推荐使用,未来版本会废弃,统一通过spring.config.import进行导入

spring.config.import[0]=nacos:${spring.application.name}.properties?group=DEFAULT_GROUP&refreshEnabled=true
spring.config.import[1]=nacos:application.properties?group=DEFAULT_GROUP&refreshEnabled=true
spring.config.import[2]=nacos:{dataId}?group={group}&refreshEnabled=true
......

@Comven 我试了,还是不行,加载不到 nacos 里面的配置。 另外,com.alibaba.cloud.nacos.NacosConfigProperties 这个类的 @ConfigurationProperties(NacosConfigProperties.PREFIX) 为什么要去掉呢?

ConfigurationProperties 注解将NacosConfigProperties发布为了一个SpringBean,但是实际上spring cloud alibaba加载nacos的时间点是在所有Bean开始初始化前进行,将nacos中的属性加载为PropertiesSource,其内部会创建一个NacosConfigProperties对象,但并不是一个SpringBean, 将NacosConfigProperties发布为一个SpringBean并没有实际用途,SCA和Nacos交互是并不依赖该Spring Bean,后续版本会对内部的组件进行进一步简化

@shiyiyue1102 @Comven 我也是试了,还是不行。感觉弄得越来越麻烦了,配置文件应该越简单越好。而且这个拼接参数个数越多就越长,整得像长城一样,一眼看不到头(说实话,也不知道咋想的)
image
image

  1. 日志信息(提示up-realty-process-yplx.yml为 null,我上面截图不是明明有的吗??难不成命名空间参数错了??不是namespace)
2024-11-28 18:09:10  WARN 21969 --- [up-realty-process] [           main] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] config[dataId=up-realty-process-yplx.yml, group=DEFAULT_GROUP] is empty
2024-11-28 18:09:10 DEBUG 21969 --- [up-realty-process] [           main] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] config[dataId=up-realty-process-yplx.yml, group=DEFAULT_GROUP] content: 
null

我的配置,目前还是在 bootstrap.yml 中配置,暂时没发现什么问题。

# spring cloud alibaba 基础设施配置
spring:
  config:
    activate:
      on-profile: alibaba
    import:
      - nacos:dante-cloud-environment.yaml?group=${PROFILE:@profile@}
      - nacos:dante-cloud-platform.yaml?group=common
      - nacos:dante-cloud-database-${DATABASE:@database@}.yaml?group=common
      - nacos:dante-cloud-database.yaml?group=common
      - nacos:dante-cloud-redis.yaml?group=common
      - nacos:dante-cloud-cache.yaml?group=common
      - nacos:dante-cloud-rest.yaml?group=common
      - nacos:dante-cloud-kafka.yaml?group=common
      - nacos:${spring.application.name}.yaml?group=service
  cloud:
    nacos:
      username: ${ALIBABA_USERNAME:@alibaba.username@}
      password: ${ALIBABA_PASSWORD:@alibaba.password@}
      config:
        namespace: ${ALIBABA_NAMESPACE:@alibaba.namespace@}
        server-addr: ${ALIBABA_CONFIG_SERVER_ADDR:@alibaba.config.server-addr@}
        file-extension: yaml
      discovery:
        namespace: ${ALIBABA_NAMESPACE:@alibaba.namespace@}
        server-addr: ${ALIBABA_DISCOVERY_SERVER_ADDR:@alibaba.discovery.server-addr@}
    sentinel:
      transport:
        port: 8719
        dashboard: ${ALIBABA_SENTINEL_SERVER_ADDR:@alibaba.sentinel.server-addr@}

代码地址,参见

@shiyiyue1102 @Comven 我也是试了,还是不行。感觉弄得越来越麻烦了,配置文件应该越简单越好。而且这个拼接参数个数越多就越长,整得像长城一样,一眼看不到头(说实话,也不知道咋想的) image image

  1. 日志信息(提示up-realty-process-yplx.yml为 null,我上面截图不是明明有的吗??难不成命名空间参数错了??不是namespace)
2024-11-28 18:09:10  WARN 21969 --- [up-realty-process] [           main] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] config[dataId=up-realty-process-yplx.yml, group=DEFAULT_GROUP] is empty
2024-11-28 18:09:10 DEBUG 21969 --- [up-realty-process] [           main] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] config[dataId=up-realty-process-yplx.yml, group=DEFAULT_GROUP] content: 
null

指定spring.cloud.nacos.config.namespace=xxx. 指定命名空间ID,不设置的情况加载的是public命名空间下的配置,
spring.config.import是spring官方推出的加载外部属性源的方式,spring cloud alibaba是遵循spring官方的标准,未来也会统一收口到只支持这一种方式

@shiyiyue1102 非常感谢

@herodotus-ecosystem 问题出在没配置namespace。现在是2023.0.3.2版本,上一个版本 config 中的namespace在 spring 中元数据没生成导致 idea 提示没这个配置。

spring.cloud.nacos.config.shared-configs[0].data-id=${spring.application.name}.properties spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP spring.cloud.nacos.config.shared-configs[0].refresh=true

spring.cloud.nacos.config.shared-configs[1].data-id=application.properties spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP spring.cloud.nacos.config.shared-configs[1].refresh=true

shared-configs 已经不推荐使用,未来版本会废弃,统一通过spring.config.import进行导入

spring.config.import[0]=nacos:${spring.application.name}.properties?group=DEFAULT_GROUP&refreshEnabled=true spring.config.import[1]=nacos:application.properties?group=DEFAULT_GROUP&refreshEnabled=true spring.config.import[2]=nacos:{dataId}?group={group}&refreshEnabled=true ......

@shiyiyue1102 请问这种方式,如何实现nacos以前激活 dev 环境,自动加载 application-dev.properties 文件。是需要自己拆分多个 bootstrap-{profile}.yml 文件吗?