简介
正如springcloudAlibaba的学习(三):nacos组件作为注册中心这篇文章中所说,nacos也是可以作为配置中心来使用的。
本文是关于nacos配置中心的时候和相关的代码。
nacos config
作用
在微服务架构中,是有很多服务的,不同的服务还有不同的环境,如开发,测试,生产等,所以会有很多的配置文件,很多很杂,就可以使用nacos config来统一管理配置。
优点
- 便于维护
- 时效性
- 安全性
- 可视化界面
修改了配置可以动态的生效,不用一个个的去服务里面改,然后重启
nacos页面中可以设置用户的权限,只能看相关权限的配置
常用的配置中心
- config
- apollo
- nacos
nacos添加配置
也可以把已有的直接克隆给其他项目,环境
权限的配置
修改nocas的配置文件application.properties
把nacos.core.auth.enabled改成true
### If turn on auth system:
nacos.core.auth.enabled=true
创建一个用户:
创建一个角色:
绑定用户和角色:
这样就创建了一个只读的用户。
删除新增都不行。
使用nacos配置中心
使用配置中心需要创建一个bootstrap.yml文件
spring:
application:
name: test
cloud:
nacos:
server-addr: localhost:8848
它是根据服务名去nacos页面中拉取对应的dataid的值的。
所以,在nacos添加配置的时候,一般dataid是服务名。
测试在程序中获取配置的值
在启动类中
@EnableFeignClients
@SpringBootApplication
public class GetOrderApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(GetOrderApplication.class, args);
String name = applicationContext.getEnvironment().getProperty("name");
System.out.println(name);
}
nacos中的各种配置
修改配置中心的其他格式配置
默认是读取配置中心的properties格式的配置的。
要想读取其他格式的配置
要修改bootstrap.yml文件
spring:
application:
name: test
cloud:
nacos:
server-addr: localhost:8848
config:
file-extension: yaml
通过file-extension指定
配置中心配置profile
服务的profile就是根据不同的环境,如开发,测试,生产来加载不同的配置文件。
springboot的常规做法是创建几个配置文件,application-dev,application-pro等,然后在application.yml配置文件中指定。
spring:
profiles:
active: dev
配合使用nacos配置中心来配置的话,配置的dataid要设置成服务名-profile.格式
如果还有默认的配置的话,优先级是profile的高的,如果profile配置中没有的值,但是默认配置中有,会进行补充。
namespace,group,dataid的配置
通常在nacos的配置中心中,namespace是区分环境的,group是区分项目的,dataid是区分服务的。
spring:
application:
name: order.service.yaml
cloud:
nacos:
server-addr: localhost:8848
config:
file-extension: yaml
namespcae: dev
group: mall
shared-configs:
- data-id: dataidtest.server.properties
refresh: true
- data-id: dataidtest1.server.properties
refresh: true
关于指定dataid配置的注意点:
- shared-configs这个是指定和服务名不一致的dataid的配置,如公共的配置。
- refresh: true表示可以动态刷新
- 在这个配置文件中,file-extension: yaml,group: mall都只是针对默认的配置或profile配置的,即要求order.service.yaml配置的。所以dataidtest.server.properties这个配置可以是任何格式,group如果没有指定的话就是DEFAULT_GROUP的。
- 在不同的group下,可以有相同的dataid。
- dataidtest1.server.properties如果有dataidtest.server.properties的配置,那么dataidtest1.server.properties会对dataidtest.server.properties的配置进行覆盖
@RefreshScope注解
代码中使用@value来获取nacos的配置的时候,无法动态获得nacos修改了的配置,需要在controller类上加上@RefreshScope,就可以马上获得nacos修改的配置。