springCloud集成nacos || nacos取值

之前项目中用的apollo,需要换成nacos做配置和注册中心.[先将erueka的jar包依赖从pom文件移除,否则会有冲突报错]

nacos文档地址:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html 

下载解压后可以直接启动,nacos默认支持mysql数据库,其它数据库可以使用插件.另外可以使用自带的detby数据库.登录账号nacos/nacos.新建命名空间/group和yaml格式配置文件,以后在springcloud项目中使用.

springcloud项目pom文件引入两个jar包,一个配置中心的,一个注册中心的

<!--nacos 配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
 

<!-- 将 Nacos 作为注册中心,并实现对其的自动配置 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
 

启动类上

之前版本@EnableDiscoveryClient注解,开启Spring Cloud的注册发现功能,现在已经不需要添加 @EnableDiscoveryClient 注解,只需要引入 Spring Cloud 注册发现组件,就会自动开启注册发现的功能。这里已经引入了 spring-cloud-starter-alibaba-nacos-discovery 依赖,也不用再添加 @EnableDiscoveryClient 注解了。
 

新建配置bootstrap.yml文件 ,里面引入nacos中的配置文件属性

#bootstrap.yml优先级比application.yml优先级 高

spring:

  #prefix−{spring.profile.active}.${file-extension}
  #nacos会根据当前环境去拼接配置名称查找相应配置文件,
  #示例:{spring.application.name}-{spring.profiles.active}-{spring.cloud.nacos.config.file-extension}
  #获取到值:nacos-autoconfig-service-dev.yml
  profiles:
    #开发环境dev,测试环境test,生产环境prod
    active: dev

  application:

    #配置应用的名称,用于获取配置
    name: nacos-autoconfig-service
  cloud:
    nacos:
      config:
        #nacos配置中心地址
        server-addr: localhost:8848

        #配置中心的命名空间id
        namespace: dev

        #配置分组,默认没有也可以
        group: DEFAULT_GROUP

        #配置文件后缀,用于拼接配置配置文件名称,目前只支持yml和properties
        file-extension: yml

        #配置自动刷新
        refresh-enabled: true

        #配置文件的前缀,默认是application.name的值,如果配了prefix,就取prefix的值
        #prefix: nacos-autoconfig-service-${spring.profile.active}

        # 配置编码
        encode: UTF-8

       discovery:  #属性和上面一样

           serer-addr:

           namespace: dev

 配置自动刷新

在配置的类增加@RefreshScope就可以实现自动刷新配置,当nacos中的配置修改后,项目无需重启就可以自动生效,这个在实际生产环境中是很有用的,有时候你需要修改线上的配置,如果没有配置中心,你需要重启服务

读取配置内容

1第一种

直接在属性上使用@Value(${})获取文件属性,不支持动态获取,key必须是静态的

如:   @Value("${datasource.url}")//这个是在nacos中的yaml中配置的

        private String dataUrl;//这边随便写

2第二种   使用nacos的api进行读取,这种方式读取到的是整个nacos的yaml格式文件内容

public String getNacosPer() {
         Properties properties = new Properties();
         // nacos服务器地址
         properties.put(PropertyKeyConst.SERVER_ADDR, "10.51.111.193");
         // 配置中心的命名空间id
         properties.put(PropertyKeyConst.NAMESPACE, "888888");
         ConfigService configService = NacosFactory.createConfigService(properties);
         // 根据dataId、group定位到具体配置文件,获取其内容. 方法中的三个参数分别是: dataId[不加后缀,即没有.yaml或.properties], group, 超时时间
         String content = configService.getConfig("application-dev", "oneDay", 3000L);
         // 因为我的配置内容是JSON数组字符串,这里将字符串转为JSON数组  
         //return JSONUtil.parseArray(content);
        return content ;
     }

3 第三种方式  可以动态读,即key可以是前端出入的内容

   

@Autowired

private ConfigurableApplicationContext applicationContext;

//或者

//private Environment environment;

@GetMapping("getNacosPer")

public String getNacosPer(){

     //environment.getProperty("key");

    applicationContext.getEnvironment().getProperty("key","string");//当没有获取的key的value时,可返回指定string内容

    return applicationContext.getEnvironment().getProperty("key");

}

共享配置(shared-configs)和扩展配(extension-config):  一个项目可以读取多个配置文件

参数解析:

  • data-id : Data Id
  • group:自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • refresh: 控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

注意:这里的Data ID后面是加.yml后缀的[写yaml取到的值为null,不写后缀项目启动报错],且不需要指定file-extension

spring:
  application:
    name: nacosDemo
  cloud:
    nacos:
      username: ${nacos.username}
      password: ${nacos.password}
      config:
        server-addr: ${nacos.server-addr}

#      server-addr:***.mse.aliyuncs.com:8848,6443,9848   可以多个端口?

        namespace: ${nacos.namespace}
        # 用于共享的配置文件
        shared-configs:
          - data-id: asdfsdf.yml
            group: cdcadraf

          - data-id: vvdreteww.yml
            group: rtewewrg

          - data-id: jyjteew.yml
            group: cvcss

        # 常规配置文件
        # 优先级大于 shared-configs,在 shared-configs 之后加载
        extension-configs:
          - data-id: sadfdsafzxc.yml
            group: regewgww
            refresh: true

          - data-id: svvvrwere.yml
            group: ngnefeww
            refresh: true

     

      discovery:  #属性和上面一样

         serer-addr:

         namespace: dev

优先级,这个未验证....

1/ 不同种类配置之间,优先级按顺序如下:主配置 > 扩展配置(extension-configs) > 共享配置(shared-configs)

2/ 同为扩展配置,存在如下优先级关系:extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0

3/ 同为共享配置,存在如下优先级关系:shared-configs[3] > shared-configs[2] > shared-configs[1] > shared-configs[0]

猜你喜欢

转载自blog.csdn.net/u014285237/article/details/128558504