SpringCloud Alibaba之Nacos注册中心学习笔记(包含注册中心以及配置中心)(二)

简介: SpringCloud Alibaba之Nacos注册中心学习笔记(包含注册中心以及配置中心)(二)

三、配置中心


原本我们是写在每个配置文件中的,若是我们要修改配置文件,那么就需要去重新打包然后部署,对于在微服务时代,可能会有大量的重复实例,难道要重新去一个个重启部署吗?


3.1、配置文件持久化介绍


在nacos配置中心中我们可以根据不同的分组来进行管理我们的配置文件,并且对应的服务也能够进行动态去读取配置文件的最新内容,在nacos配置中心里其配置是进行持久化存储的,其是存储在mysql数据库当中。



3.2、实战四:nacos-config服务读取配置中心文件


nacos控制台添加配置文件




注意了,配置格式一定要选择yaml,因为之后我们配置文件配置的文件类型就是yaml,否则会一直读取不到的!


接着点击发布即可:



nacos-config服务构建读取配置文件



引入依赖:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>


1、开启服务注册注解:


@EnableDiscoveryClient


2、配置类User:


package com.changlu.nacosconfig.config;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @Description:
 * @Author: changlu
 * @Date: 10:58 PM
 */
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @Value("${user.username}")
    private String username;
    @Value("${user.age}")
    private Integer age;
    @Value("${user.sex}")
    private String sex;
    @Value("${user.hobby}")
    private String hobby;
    @Value("${user.height}")
    private Integer height;
}



3、添加一个控制器,在控制器中会去返回读取配置信息的内容


package com.changlu.nacosconfig.controller;
import com.changlu.nacosconfig.config.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Description:
 * @Author: changlu
 * @Date: 11:06 PM
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private User user;
    @GetMapping("/info")
    public String getUserInfo() {
        System.out.println(user);
        String res = this.user.toString();
        //注意:添加了@RefreshScope注解不能在mvc的方法中直接返回,因为该user是代理类,进行序列化会进行报错!
        return res;
    }
}



4、关键的来了,配置文件的参数设置


bootstrap.yml:该配置会先于application.yaml读取
server:
  port: 8081
spring:
  application:
    name: nacos-config
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        # 指定命名空间和组名(默认是去public空间及DEFAULT_GROUP组中去找)
#        namespace: 477245fa-d5e1-47e0-9580-4a8e268c3f58   # 若是不指定,默认就是public
#        group: B_GROUP   # 若是不指定,默认是DEFAULT_GROUP
        # 关键两个读取配置的信息
        # prefix: nacos-config  # 配置文件的前缀
        file-extension: yml  # 文件类型



可以看到在这里配置中并没有去指定命名空间以及组名,那么此时就表示默认是去public空间以及DEFAULT_GROUP组去查找。

对于配置文件的名字会如下进行搜索:当前是在public空间、`DEFAULT_GROUP组``



注意:一旦我们指定指定的命名空间与组时,那么就会去该组中查找是否有该配置,若是没有项目会在启动过程中就会报错!


我尝试了下,报错内容如下:



测试

还是依据上面的配置来进行启动,接着去访问接口:http://localhost:8081/user/info



成功读取到配置!


3.3、动态刷新配置类信息(两种方案)


注意:添加了@RefreshScope注解不能在mvc的方法中直接返回,因为该user是代理类,进行序列化会进行报错!


方式一:读取某个属性使用@Value注解,并在对应的配置类上添加@RefreshScope


import org.springframework.cloud.context.config.annotation.RefreshScope;
@RefreshScope  //刷新配置注解
public class Config {
    @Value("${config.name}")
    private String name;
    @Value("${config.type}")
    private String type;



方式二:直接使用@ConfigurationProperties 读取配置,如下


@ConfigurationProperties(prefix = "config")
public class Config {
    private String name;
    private String type;
}


3.4、实战五:多环境读取配置、共享多组配置变量以及扩展多组配置文件


nacos读取配置中心流程补充

下面图例来自:Nacos实现配置管理及集群搭建,觉得讲的很清晰直接拿来了,如有侵权,联系我删除。


在没加入 Nacos 配置之前,获取配置是这样:



加入 Nacos 配置,它去读取远程nacos的配置文件是在 application.yml 之前的:



所以我们此时不能够在application.yml中来去配置远程nacos的配置中心地址,应当在更高优先级的bootstrap.yml文件中来进行配置:



这就是我们为什么要再bootstrap配置文件中进行书写配置的原因了!


实操测试

在nacos中提供了多环境读取配置、共享多组配置变量以及扩展多组配置文件。


多环境读取配置:只需要你进行添加spring.application.active变量来进行指定即可。

共享多组配置变量:nacos中提供了shared-configs配置参数,你可以来配置多条相同命名空间不同组的配置文件。

扩展多组配置文件:nacos中提供了extension-configs配置参数,你可以来配置多条相同命名空间不同组的配置文件。

下面就来尝试下:



准备好我们的配置类以及一个控制器来进行输出配置类信息:


package com.changlu.nacosconfig.config;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
 * @Description:
 * @Author: changlu
 * @Date: 10:12 AM
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
//@RefreshScope
@ConfigurationProperties(prefix = "config")
public class Config {
//    @Value("${config.name}")
    private String name;
//    @Value("${config.type}")
    private String type;
    private String envSharedValue;
    private String a;
    private String b;
}



控制器类:


package com.changlu.nacosconfig.controller;
import com.changlu.nacosconfig.config.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Description:
 * @Author: changlu
 * @Date: 11:06 PM
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private Config config;
    @GetMapping("/config")
    public String getUserInfo() {
        String res = config.toString();
        return res;
    }
}


配置类:


server:
  port: 8088
spring:
  application:
    name: nacos-config
  profiles:
    active: pro
  cloud:
    nacos:
      username: nacos
      password: nacos
      config:
        server-addr: localhost:8848  # 注册到nacos的注册中心的服务地址
        namespace: 477245fa-d5e1-47e0-9580-4a8e268c3f58   # 若是不指定,默认就是public
        group: A_GROUP   # 若是不 指定,默认是DEFAULT_GROUP
        file-extension: yaml  # 文件类型
        shared-configs:  # 共享变量
          - data-id: nacos-config.yaml
            group: DEFAULT_GROUP
            refresh: true # 是否支持刷新
        extension-configs:  # 扩展配置文件
          - data-id: nacos-config-a.yaml
            group: A_GROUP
            refresh: true # 是否支持刷新
          - data-id: nacos-config-b.yaml
            group: B_GROUP
            refresh: true # 是否支持刷新


首先是多环境变量的解释:





接下来是多组共享变量的解释:



最后则是多组扩展配置文件的解释:



之后我们来进行测试一下:


①设置成dev来进行启动:




调用接口测试一下:



②接着设置成pro来测试一下:




没得问题!


3.5、配置文件中心总结(包含不同位置文件写什么、优先级、示例)


一般nacos项目的话,会在本地配有一个bootstrap配置文件,然后远端配置好多环境配置文件,以及一些公共的配置项,这就可能用到共享配置以及扩展配置了!


那么在不同文件中具体写什么呢?


1、boostrap.yml:应用名称,nacos的注册中心配置以及配置文件读取指定。


2、远端配置:


多环境:端口、测试环境、生产环境的密码等。

公共:redis配置、mysql配置等等。

扩展:项目自定义的一些配置项。

配置项优先级介绍:


1、针对于多组配置如公共、扩展的。


上述两类配置都是数组,对同种配置,数组元素对应的下标越⼤,优先级越⾼。也就是排在后⾯的相同配置,将覆盖排在前⾯的同名配置。


例如:同为扩展配置(公共配置同样如此),存在如下优先级关系:extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0。

2、不同种类配置的优先级:主配置 > 扩展配置(extension-configs) > 共享配置(shared-configs)。


看下我在阅读其他博文中给出的配置示例:


相关文章
|
1天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
10 0
|
1天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
9天前
|
Java API 对象存储
对象存储OSS产品常见问题之使用Spring Cloud Alibaba情况下文档添加水印如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
24 2
|
17天前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
|
17天前
|
SpringCloudAlibaba Java API
SpringCloud Alibaba微服务工程搭建(保姆级)
SpringCloud Alibaba微服务工程搭建(保姆级)
|
17天前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
24天前
|
开发框架 负载均衡 Java
Spring boot与Spring cloud之间的关系
总之,Spring Boot和Spring Cloud之间的关系是一种构建和扩展的关系,Spring Boot提供了基础,而Spring Cloud在此基础上提供了分布式系统和微服务架构所需的扩展和工具。
18 4
Spring boot与Spring cloud之间的关系
|
SpringCloudAlibaba 网络协议 Cloud Native
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。
2368 0
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
|
8月前
|
Java Nacos Sentinel
Spring Cloud Alibaba学习指南
由于在2018年Netflix公司宣布对其核心组件Hystrix、Ribbon、zuul、Eureka等进入维护状态,也就是Spring Cloud Netflix系列。由此Spring Cloud Alibaba就诞生了,值得注意的是Spring Cloud Alibaba完全兼容了Spring Cloud Netflix中的Ribbon、Feign、Eureka等组件,所以基于Spring Cloud Netflix的项目可以无缝迁移到Spring Cloud Alibaba。
397 0
|
敏捷开发 运维 资源调度
Spring Cloud Alibaba学习之开幕
Spring Cloud Alibaba学习之开幕