Nacos做配置中心使用

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

官方文档: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

前面已经搭建好 Nacos Server服务了,下面使用 Nacos 做配置中心。

一、Nacos做配置中心使用

在app-user服务中使用Nacos做配置中心。

1、引入依赖

        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>

2、添加 bootstrap配置文件

bootstrap配置文件,一般添加 nacos配置中心的相关信息。项目的信息还是放到 application配置文件中。

注意:必须使用 bootstrap.properties或者 bootstrap.yaml配置文件来配置 Nacos Server 地址。

# nacos配置中心地址
spring:
  cloud:
    nacos:
      server-addr: 192.168.xxx.xxx:8848
      username: nacos
      password: nacos
      config:
        namespace: b4d0832b-a7b0-44c2-8ce5-1abe676a4736 # 使用命名空间id

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

${prefix}-${spring.profiles.active}.${file-extension} 
  • prefix: 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active: 即为当前环境对应的 profile, 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在, dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
  • file-exetension: 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。

此时,application.yaml文件内容如下:

server:
  port: 18081
  servlet:
    context-path: /app-user

spring:
  application:
    name: app-user  #应用名称

3、Nacos Server管理界面添加配置管理

在 Nacos Server管理界面中,新建 DataId为 app-user 的配置列表。

Nacos做配置中心使用_第1张图片

4、测试访问配置信息

这里在启动类中,获取配置信息。

@SpringBootApplication
public class AppUserApplication {

	public static void main(String[] args) throws InterruptedException {
		// SpringApplication.run(AppUserApplication.class, args);

		ConfigurableApplicationContext applicationContext = SpringApplication.run(AppUserApplication.class, args);
		while (true) {
			String userName = applicationContext.getEnvironment().getProperty("user.name");
			String userAge = applicationContext.getEnvironment().getProperty("user.age");
			System.err.println("user name :" + userName + "; age: " + userAge);
			TimeUnit.SECONDS.sleep(1);
		}
	}
}

启动服务,发现获取的是 app-user.properties,我们把 app-user.properties删除,立刻获取到了 app-user配置信息。

配置文件的优先级为:app-user.properties > app-user。两者都是 Properties格式。

Nacos做配置中心使用_第2张图片
然后,我们再把 app-user改为 yaml格式。发现获取不到 Nacos的配置信息了。

5、设置文件扩展名

在 bootstrap配置文件中,需要我们显示的声明 dataid 文件扩展名为 yaml。

重启服务,发现获取又到了 app-user(yaml格式)配置信息。

Nacos做配置中心使用_第3张图片

6、DataId总结

  • 1)nacos会自动根据服务名拉取 DataId对应的配置文件。
    • 如果DataId与服务名相同,则这个配置文件称为默认配置文件,默认DataId可以不写后缀,其他DataId必须写上后缀。
    • 如果DataId跟服务名不一致 就需要手动创建DataId。
  • 2)Nacos客户端默认是Properties的文件扩展名 ,如果修改成为非Properties格式,则必须通过 spring.cloud.nacos.config.file-extension=yaml进行设置。
  • 3)一般我们约定使用一种格式,指定好file-extension=yaml。DataId的话可以不写或写上后缀(推荐)。
  • 4)DataId命名一般是服务名,通常使用.来拼接。

二、Config相关配置

上面针对 spring.cloud.nacos.config.xxx配置,简单使用了 namespace和 file-extension。其他配置下面也使用一下。

1、@Value获取配置信息

启动app-user服务,使用 Spring原生的 @Value(“key”)注解就可以获取取 naocs配置中心的信息。

  • @Value注解:可以获取到配置中心的值,但是无法动态感知修改后的值。
  • @RefreshScope注解:Nacos的注解,可以实现动态感知配置中心修改后的值
@RestController
@RequestMapping("/UserNacos")
@Slf4j
@RefreshScope // 动态感知配置中心修改后的值
public class UserNacosConfigController {

	/**
	 * 使用 Spring原生的 @Value(“key”)注解获取配置
	 */
	@Value("${user.name}")
	private String userName;

	@Value("${user.age}")
	private Integer age;

	/**
	 * http://localhost:18081/app-user/UserNacos/getNacosConfig
	 * 
	 * @return
	 */
	@GetMapping("getNacosConfig")
	public R getNacosConfig() {
		String user = "userName:" + userName + ", age:" + age;
		log.info("user信息:" + user);

		return R.ok().put("user", user);
	}

}

访问,然后修改动态获取值,ok。

Nacos做配置中心使用_第4张图片

2、支持profile粒度的配置

spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,
不仅仅加载了以 dataid为 s p r i n g . a p p l i c a t i o n . n a m e . {spring.application.name}. spring.application.name.{file-extension:properties} 为前缀的基础配置,
还加载了dataid为 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}.${file-extension:properties} 的基础配置。

在日常开发中,如果遇到多套环境下的不同配置,可以通过 Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

1)application.yaml配置文件如下:

server:
  port: 18081
  servlet:
    context-path: /app-user

spring:
  application:
    name: app-user  #应用名称
  profiles:
    active: dev

2)nacos管理界面,创建DataId为的配置

Nacos做配置中心使用_第5张图片
3)重启app-user服务。发现获取了 app-user-dev.yaml的配置信息

在这里插入图片描述

3、支持自定义 namespace 的配置

Namespace 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。

在没有明确指定${spring.cloud.nacos.config.namespace}配置的情况下, 默认使用的是Nacos 上 Public 这个namespace。

如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b4d0832b-a7b0-44c2-8ce5-1abe676a4736

4、支持自定义 Group 的配置

Group是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。

在没有明确指定${spring.cloud.nacos.config.group}配置的情况下,默认是DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

5、支持自定义扩展的 Data Id配置

Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。

Data ID 通常采用类 Java 包(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

自定义 Data Id 的配置有两种方式:

  • spring.cloud.nacos.config.sharedConfigs:支持共享的 DataId。比如:不同工程的通用配置。
  • spring.cloud.nacos.config.extensionConfigs:支持扩展的 DataId。比如:一个应用多个 DataId 的配置
# nacos配置中心地址
spring:
  cloud:
    nacos:
      server-addr: 192.168.xxx.xxx:8848
      username: nacos
      password: nacos
      config:
        namespace: b4d0832b-a7b0-44c2-8ce5-1abe676a4736 # 使用命名空间id
#        group: dev
        file-extension: yaml
        shared-configs:
          - data-id: app.service.common01.yaml
            refresh: true
            #group:  默认是Default-group
          - data-id: app.service.common02.yaml
            refresh: true
        extension-configs:
          - data-id: app.service.common02.yaml
            refresh: true

重启 app-user服务。创建 DataId为 app.service.common01.yaml配置。发现服务注册成功。

Nacos做配置中心使用_第6张图片

6、配置的优先级

优先级从高到低:

  • s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}.${file-extension:properties}
  • s p r i n g . a p p l i c a t i o n . n a m e . {spring.application.name}. spring.application.name.{file-extension:properties}
  • ${spring.application.name}
  • extensionConfigs:一个微服务的多个配置,比如:nacos,mybatis
  • sharedConfigs:多个微服务公共配置,比如:redis

profile > 带后缀配置文件 > 默认配置文件 > extension-configs(下标越大优先级就越大) >shared-configs(下标越大优先级就越大)

注意:优先级高的会覆盖优先级低的配置项, 并且会形成互补。

– 求知若饥,虚心若愚。

你可能感兴趣的:(#,Nacos,Nacos做配置中心使用)