启动了 Nacos server 后,您就可以参考以下示例代码,为您的 Spring Cloud 应用启动 Nacos 配置管理服务了。完整示例代码请参考:nacos-spring-cloud-config-example
- 添加依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${latest.version}</version> </dependency>
注意:版本 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
- 在
bootstrap.properties
中配置 Nacos server 的地址和应用名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}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。- 通过 Spring Cloud 原生注解
@RefreshScope
实现配置自动更新:@RestController @RequestMapping("/config") @RefreshScope useLocalCachepublic class test { @Value("${test}") private String useLocalCache; @RequestMapping("/get") public String get() { return useLocalCache; } }
- 配置文件
spring: application: name: config-server cloud: nacos: config: file-extension: yaml server-addr: 127.0.0.1:8848
以上配置完成后 配置文件设置为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配置中心的配置文件 - 码农教程