一、使用Nacos管理配置

一般我们都将配置交给application管理,但是每个微服务都有自己的application,这样一来不利于维护,接下来咱们就来看看Nacos是如何管理配置的;
一、首先加依赖:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

二、创建一个bootstrap.yml文件,并配置:

spring:
  application:
    name: member

  profiles:
    active: dev

  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml

三、在Nacos控制台中添加配置:

使用nacos配置mysql nacos yml配置_使用nacos配置mysql


参数详解:

Data ID:member对应spring.application.name(应用名称),dev对应spring.profiles.active(开发版本),yaml对应spring.cloud.nacos.config.file-extension(指使用什么类型文件),并且在选择配置格式时必须和Data ID的文件类型一致;

四、使用方面和平常使用配置在项目内的内容一致:

@Value("${my.configuration}")
    private String myConfiguration;

    @GetMapping("/testConfiguration")
    public String testConfiguration(){
        return myConfiguration;
    }

二、配置属性动态刷新与回滚(附回滚Bug)

只需要添加上@RefreshScope注解即可在配置内容修改时不重启项目自动刷新:

@RestController
@RequestMapping("/member")
//开启动态更新配置内容
@RefreshScope
public class MemberController {

    @Value("${my.configuration}")
    private String myConfiguration;

    @GetMapping("/testConfiguration")
    public String testConfiguration(){
        return myConfiguration;
    }

nacos控制台太提供了回滚功能,只需在历史版本菜单中填上Data ID和Group即可查询到该配置的历史版本,选择需要回滚的版本即可,不过这里有个bug,如果回滚到初始版本,会导致该配置直接被删除,不过也不用太担心,官方表示在Nacos V1.2版本已经修复该bug了;

使用nacos配置mysql nacos yml配置_java_02

三、开发、测试、正式版本如何共享配置

在开发、测试、正式三个版本中,肯定有些配置是一致的,那这时候就可以将这些一致的配置共享,不需要去每个版本都设置一遍,减少工作量,通过下面两句启动日志可以发现,member微服务下载配置时先下载member-dev.yaml,接着会再去下载member.yaml,聪明的小伙伴应该已经知道如何做了吧,没错,就是将共享的配置放在member.yaml中即可,也就是应用名称.文件属性的配置文件就是三个版本的共享文件,优先级的话是member-dev.yaml>member.yaml(即指定配置>通用配置);

Loading nacos data, dataId: 'member-dev.yaml', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='member-dev.yaml'}, NacosPropertySource {name='member.yaml'}]}

四,不同应用如何共享配置

不同的应用之间肯定也有相同的配置,比如相同的Nacos注册地址等,下面我们就来看两种应用间的共享配置方式:
方式一:
使用shared-dataids,只需在bootstrap.yml文件中添加上如下配置即可:

spring:
  application:
    name: member

  profiles:
    active: prod

  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        #共享配置的Data ID,多个使用,分隔
        #越靠后,优先级越高;normal.yaml>common.yaml
        #.yaml后缀不能少,目前只支持yaml/properties
        shared-dataids: common.yaml,normal.yaml
        #哪些共享配置支持动态刷新,多个用,隔开
        refreshable-dataids: common.yaml,normal.yaml

方式二:
使用ext-config方式配置,同样配置在bootstrap.yml文件中:

spring:
  application:
    name: member

  profiles:
    active: prod

  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        ext-config:
          #共享配置的Data ID,yaml后缀不能少,目前只支持yaml/properties
          #越靠后,优先级越高;normal.yaml>common.yaml
          - data-id: common.yaml
            #common.yaml所在的group
            group: DEFAULT_GROUP
            #是否允许刷新,默认false
            refresh: true
          - data-id: normal.yaml
            group: DEFAULT_GROUP
            refresh: true

我们现在已经学会了自动配置方式,shared-dataids方式,ext-config方式,当这三中方式都有配置时,优先级为:shared-dataids<ext-config<自动

五、本地配置VS远程配置

默认情况下,远程配置的优先级更高,如果想要让本地配置优先级高于远程配置,需在application.yml(看清楚,不是bootstrap.yml)中配置:

spring:
  cloud:
    config:
      #是否允许本地配置覆盖远程配置
      allow-override: true
      #是否一切以本地配置为准,默认false
      override-none: false
      #系统环境变量或系统属性才能覆盖远程配置文件的配置
      #本地配置文件中配置优先级低于远程配置,默认true
      override-system-properties: true

六、搭建生产可用的Nacos集群

因为Nacos的配置都存在内嵌的derby数据库中,这样一来就无法将derby变成高可用模式,那么如何搭建成产可用的Nacos集群呢?详见该手记:http://www.imooc.com/article/288153

七、实践总结

一、能放本地,不放远程
因为放在本地,开发人员能够更好的查看配置信息和排查错误和修改;

二、尽量规避优先级

三、定规范,例如所有配置属性都要加上注释

四、配置管理人员尽量少
因为现在Nacos并没有做权限管理,有些配置等级较高,并不能让所有开发人员都看到;