• SpringCloud 配置中心【Nacos_Config】


    目录

    1. SpringCloud Config

    2. Nacos_Config

    3. 使用 Nacos Config 添加/配置 外部配置文件

    3.1 添加/配置命名空间

    3.2 添加/配置 外部配置文件

    3.3 外部文件克隆到其他空间

    4. 新建子模块【config_client】

    4.1 父模块pom文件依赖结构

             4.2 子模块pom文件结构

    4.3 配置子模块 bootstrap.yml文件

    4.4 配置子模块启动类

    4.5 编写controller接口测试

    4.6 启动项目测试接口

    4.6.1 Nacos_config外部配置文件数据  

    4.6.2 测试接口获取到的nacos_config外部配置文件数据 

    4.6.3 切换命名空间


    前言

      了解SpringCloud 基础使用与Nacos 请查阅下篇文章

      SpringCloud 使用与Nacos_JoneClassMate的博客-CSDN博客

      了解SpringCloud 远程通信 请查阅下篇文章 

      SpringCloud 远程调用_JoneClassMate的博客-CSDN博客


    1. SpringCloud Config

    微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。

    由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。 Spring Cloud 提供了 ConfigServer来解决这个问题.

    Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服 务应用的所有环境提供了一个中心化的外部配置。

    SpringCloud Config 分为服务端和客户端两部分。 

    服务端也称为分布式配置中心,他是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置 信息,加密/解密 信息等访问接口。

    客户端则是通过制定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心 获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并 且可以通过git客户端工具来方便的管理和访问配置内容。

     一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同:

    • 不同环境不同配置:例如数据源在不同的环境(开发,测试,生产)是不同的,可以通过配置中心
    • 运行期间可以动态调整。例如根据各个微服务的负载状况,动态调整数据源连接池大小或者熔断阀 值,并且调整时不停止微服务(配置修改后可以自动更新)

    2. Nacos_Config

    Spring Cloud Alibaba Nacos Config Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布 式系统中的外部化配置提供服务器端和客户端支持。

    使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外 部属性配置。

    Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象

    在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生 产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。 

    3. 使用 Nacos Config 添加/配置 外部配置文件

         3.1 添加/配置命名空间

     

     

    • 添加完成的结构 

     

         3.2 添加/配置 外部配置文件

     

     

    • 添加完成的结构 

     

          3.3 外部文件克隆到其他空间

     

     

    4. 新建子模块【config_client】

    • 因为小编是在父模块里面一个子模块里面完成的配置 也可以在单个模块里面完成

        4.1 父模块pom文件依赖结构

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>com.jmhgroupId>
    6. <artifactId>springcloud01artifactId>
    7. <version>1.0-SNAPSHOTversion>
    8. <packaging>pompackaging>
    9. <modules>
    10. <module>nacos_providermodule>
    11. <module>nacos_consumermodule>
    12. <module>nacos_commonsmodule>
    13. <module>config_clientmodule>
    14. modules>
    15. <name>springcloud01 Maven Webappname>
    16. <url>http://www.example.comurl>
    17. <properties>
    18. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    19. <maven.compiler.source>1.7maven.compiler.source>
    20. <maven.compiler.target>1.7maven.compiler.target>
    21. <spring-boot.version>2.4.1spring-boot.version>
    22. <spring-cloud.version>2020.0.0spring-cloud.version>
    23. <spring-cloud-alibaba.version>2021.1spring-cloud-alibaba.version>
    24. properties>
    25. <dependencies>
    26. <dependency>
    27. <groupId>org.springframework.bootgroupId>
    28. <artifactId>spring-boot-starter-testartifactId>
    29. dependency>
    30. <dependency>
    31. <groupId>org.springframework.bootgroupId>
    32. <artifactId>spring-boot-starter-webartifactId>
    33. dependency>
    34. <dependency>
    35. <groupId>com.alibaba.cloudgroupId>
    36. <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    37. dependency>
    38. <dependency>
    39. <groupId>org.springframework.cloudgroupId>
    40. <artifactId>spring-cloud-starter-openfeignartifactId>
    41. dependency>
    42. <dependency>
    43. <groupId>org.springframework.cloudgroupId>
    44. <artifactId>spring-cloud-loadbalancerartifactId>
    45. dependency>
    46. <dependency>
    47. <groupId>ma.glasnost.orikagroupId>
    48. <artifactId>orika-coreartifactId>
    49. <version>1.4.6version>
    50. dependency>
    51. <dependency>
    52. <groupId>org.projectlombokgroupId>
    53. <artifactId>lombokartifactId>
    54. dependency>
    55. <dependency>
    56. <groupId>com.jmhgroupId>
    57. <artifactId>nacos_commonsartifactId>
    58. <version>0.0.1-SNAPSHOTversion>
    59. dependency>
    60. <dependency>
    61. <groupId>com.alibaba.cloudgroupId>
    62. <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    63. dependency>
    64. <dependency>
    65. <groupId>org.springframework.cloudgroupId>
    66. <artifactId>spring-cloud-starter-bootstrapartifactId>
    67. dependency>
    68. dependencies>
    69. <dependencyManagement>
    70. <dependencies>
    71. <dependency>
    72. <groupId>org.springframework.bootgroupId>
    73. <artifactId>spring-boot-dependenciesartifactId>
    74. <version>${spring-boot.version}version>
    75. <type>pomtype>
    76. <scope>importscope>
    77. dependency>
    78. <dependency>
    79. <groupId>org.springframework.cloudgroupId>
    80. <artifactId>spring-cloud-dependenciesartifactId>
    81. <version>${spring-cloud.version}version>
    82. <type>pomtype>
    83. <scope>importscope>
    84. dependency>
    85. <dependency>
    86. <groupId>com.alibaba.cloudgroupId>
    87. <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    88. <version>${spring-cloud-alibaba.version}version>
    89. <type>pomtype>
    90. <scope>importscope>
    91. dependency>
    92. dependencies>
    93. dependencyManagement>
    94. project>

        4.2 子模块pom文件结构

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>com.jmhgroupId>
    6. <artifactId>config_clientartifactId>
    7. <version>0.0.1-SNAPSHOTversion>
    8. <name>config_clientname>
    9. <description>Demo project for Spring Bootdescription>
    10. <parent>
    11. <artifactId>springcloud01artifactId>
    12. <groupId>com.jmhgroupId>
    13. <version>1.0-SNAPSHOTversion>
    14. parent>
    15. <build>
    16. <plugins>
    17. <plugin>
    18. <groupId>org.springframework.bootgroupId>
    19. <artifactId>spring-boot-maven-pluginartifactId>
    20. <executions>
    21. <execution>
    22. <goals>
    23. <goal>repackagegoal>
    24. goals>
    25. execution>
    26. executions>
    27. plugin>
    28. plugins>
    29. build>
    30. project>

        4.3 配置子模块 bootstrap.yml文件

    1. server:
    2. port: 8083
    3. spring:
    4. application:
    5. # 会自动根据服务名拉取data-id对应的配置文件.如果data-id跟服务名不一致 就需要手动指定data-id
    6. # 跟服务名相同的data-id的配置文件,称之为默认的配置文件
    7. # 除了默认的配置文件,其他配置文件必须写上后缀
    8. name: config-client
    9. cloud:
    10. nacos:
    11. #注册中心
    12. discovery:
    13. server-addr: 127.0.0.1:8848
    14. # username: nacos
    15. # password: nacos
    16. #配置中心
    17. config:
    18. prefix: ${spring.application.name}
    19. #指定nacos配置中心地址
    20. server-addr: 127.0.0.1:8848
    21. file-extension: yml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties
    22. #namespace: ee98175d-fa34-4bd1-a732-e15c5cb352d6 # 使用的 nacos 的命名空间,默认为 null
    23. group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
    24. # 共享配置集数组
    25. shared-configs:
    26. - data-id: config-redis.yml
    27. group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
    28. refresh: true # 是否自动刷新配置,默认为 false

    SpringBoot默认支持properties和YAML两种格式的配置文件。

     

    bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使 用来配置application.yml中使用到参数等

    application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用 的公共参数等。

    bootstrap.yml 先于 application.yml 加载

        4.4 配置子模块启动类

    1. package com.jmh.config_client;
    2. import lombok.Data;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. import org.springframework.boot.context.properties.ConfigurationProperties;
    6. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    7. import org.springframework.context.annotation.Configuration;
    8. @SpringBootApplication
    9. @EnableDiscoveryClient
    10. @SuppressWarnings("all")
    11. public class ConfigClientApplication {
    12. public static void main(String[] args) {
    13. SpringApplication.run(ConfigClientApplication.class, args);
    14. }
    15. /*对象形式获取nacos配置文件里面的属性*/
    16. @Configuration
    17. @ConfigurationProperties(prefix = "email")
    18. @Data
    19. public class EmailProperties{
    20. private String host;
    21. private String port;
    22. private String username;
    23. private String userpwd;
    24. }
    25. }

        4.5 编写controller接口测试

    1. package com.jmh.config_client.controller;
    2. import com.jmh.config_client.ConfigClientApplication;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.beans.factory.annotation.Value;
    5. import org.springframework.cloud.context.config.annotation.RefreshScope;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.RestController;
    8. /**
    9. * @author 蒋明辉
    10. * @data 2022/11/6 14:05
    11. */
    12. @RestController
    13. @RefreshScope
    14. @SuppressWarnings("all")
    15. public class TestController {
    16. /*属性形式获取nacos里面配置文件的属性*/
    17. @Value("${redis.host}")
    18. private String host;
    19. @Value("${redis.port}")
    20. private String port;
    21. @Autowired
    22. private ConfigClientApplication.EmailProperties emailProperties;
    23. @RequestMapping("/run")
    24. public String email(){
    25. StringBuffer str=new StringBuffer();
    26. str.append("email:"+emailProperties);
    27. str.append("redis:"+host+",");
    28. str.append(port);
    29. return str.toString();
    30. }
    31. }

     @RefreshScope 实现配置实时更新

        4.6 启动项目测试接口

    •  可测试接口获取到的外部配置文件的数据是否一致

           4.6.1 Nacos_config外部配置文件数据  

           4.6.2 测试接口获取到的nacos_config外部配置文件数据 

     

           4.6.3 切换命名空间

    • 复制命名空间步骤 

     

    •  复制好的命名空间粘贴到子项目bootstrap.yml文件
    •  spring.cloud.nacos.config.namespace
  • 相关阅读:
    QT(39)-vs开发qt程序提示无法打开源文件
    docker入门加实战—docker安装并配置阿里云加速
    蓝桥杯(3.11)
    【性能|优化】TB级flink任务报错分析:Could not compute the container Resource
    24计算机考研调剂 | 重庆工商大学
    LeetCode 121:买卖股票的最佳时机
    DFT工程师怎样才能做到年薪50W+ ?
    《向量数据库》——向量数据库Milvus 和大模型出联名款AI原生Milvus Cloud
    客服系统Golang源码
    基于 Servlet 的博客系统
  • 原文地址:https://blog.csdn.net/m0_63300795/article/details/127733317