Nacos Spring Cloud配置管理指定file-extension的格式为yaml不生效

韩安顺
2023-12-01

启动了 Nacos server 后,您就可以参考以下示例代码,为您的 Spring Cloud 应用启动 Nacos 配置管理服务了。完整示例代码请参考:nacos-spring-cloud-config-example

  1. 添加依赖:
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>${latest.version}</version>
    </dependency>
  2. 注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

    更多版本对应关系参考:版本说明 Wiki

  3. 在 bootstrap.properties 中配置 Nacos server 的地址和应用名
  4. spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    
    spring.application.name=example
    

    说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

    在 Nacos Spring Cloud 中,dataId 的完整格式如下:

    ${prefix}-${spring.profiles.active}.${file-extension}
    
  5. prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  6. spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  7. file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
  8. 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:
    @RestController
    @RequestMapping("/config")
    @RefreshScope
    useLocalCachepublic class test {
        @Value("${test}")
        private String useLocalCache;
    
        @RequestMapping("/get")
        public String get() {
            return useLocalCache;
        }
    }
  9. 配置文件
    spring:
      application:
        name: config-server
      cloud:
        nacos:
          config:
            file-extension: yaml
            server-addr: 127.0.0.1:8848
  10. 以上配置完成后 配置文件设置为yaml格式启动后报错

Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='config-server.properties,DEFAULT_GROUP'}, NacosPropertySource {name='config-server,DEFAULT_GROUP'}]}

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.test': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'test' in value "${test}"

 报错时控制台信息加载了nacos的配置信息,但是加载信息中的格式为默认格式.properties,然后就是以为file-extension指定格式没有生效读取不到配置信息

格式,引用依赖都没有问题 

最后原来是配置文件命名有问题

问题所在:

原来配置文件名字是application.yml

修改为bootstrap.yml 就可以加载到了

一、加载顺序

bootstrap.yml(bootstrap.properties)先加载
application.yml(application.properties)后加载
bootstrap.yml 用于应用程序上下文的引导阶段。

bootstrap.yml 由父Spring ApplicationContext加载。

父ApplicationContext 被加载到使用 application.yml 的之前。

二、配置区别


bootstrap.yml 和application.yml 都可以用来配置参数。

bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
application.yml 可以用来定义应用级别的。

引用文章 :读取Nacos配置中心的配置文件 - 码农教程

 类似资料: