目录
3. 使用 Nacos Config 添加/配置 外部配置文件
4.6.2 测试接口获取到的nacos_config外部配置文件数据
SpringCloud 使用与Nacos_JoneClassMate的博客-CSDN博客
SpringCloud 远程调用_JoneClassMate的博客-CSDN博客
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。
由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。 Spring Cloud 提供了 ConfigServer来解决这个问题.
Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服 务应用的所有环境提供了一个中心化的外部配置。
SpringCloud Config 分为服务端和客户端两部分。
服务端也称为分布式配置中心,他是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置 信息,加密/解密 信息等访问接口。
客户端则是通过制定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心 获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并 且可以通过git客户端工具来方便的管理和访问配置内容。
一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同:
- 不同环境不同配置:例如数据源在不同的环境(开发,测试,生产)是不同的,可以通过配置中心
- 运行期间可以动态调整。例如根据各个微服务的负载状况,动态调整数据源连接池大小或者熔断阀 值,并且调整时不停止微服务(配置修改后可以自动更新)
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 环境中。当应用程序通过部署管道从开发到测试再到生 产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
- "1.0" encoding="UTF-8"?>
-
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0modelVersion>
- <groupId>com.jmhgroupId>
- <artifactId>springcloud01artifactId>
- <version>1.0-SNAPSHOTversion>
-
- <packaging>pompackaging>
-
-
- <modules>
- <module>nacos_providermodule>
- <module>nacos_consumermodule>
- <module>nacos_commonsmodule>
- <module>config_clientmodule>
- modules>
-
- <name>springcloud01 Maven Webappname>
-
- <url>http://www.example.comurl>
-
-
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <maven.compiler.source>1.7maven.compiler.source>
- <maven.compiler.target>1.7maven.compiler.target>
- <spring-boot.version>2.4.1spring-boot.version>
- <spring-cloud.version>2020.0.0spring-cloud.version>
- <spring-cloud-alibaba.version>2021.1spring-cloud-alibaba.version>
- properties>
-
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-openfeignartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-loadbalancerartifactId>
- dependency>
-
- <dependency>
- <groupId>ma.glasnost.orikagroupId>
- <artifactId>orika-coreartifactId>
- <version>1.4.6version>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- dependency>
-
- <dependency>
- <groupId>com.jmhgroupId>
- <artifactId>nacos_commonsartifactId>
- <version>0.0.1-SNAPSHOTversion>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-bootstrapartifactId>
- dependency>
- dependencies>
-
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-dependenciesartifactId>
- <version>${spring-boot.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-dependenciesartifactId>
- <version>${spring-cloud.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-alibaba-dependenciesartifactId>
- <version>${spring-cloud-alibaba.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
- dependencies>
- dependencyManagement>
-
-
- project>
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <groupId>com.jmhgroupId>
- <artifactId>config_clientartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>config_clientname>
- <description>Demo project for Spring Bootdescription>
-
-
- <parent>
- <artifactId>springcloud01artifactId>
- <groupId>com.jmhgroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- <executions>
- <execution>
- <goals>
- <goal>repackagegoal>
- goals>
- execution>
- executions>
- plugin>
- plugins>
- build>
-
- project>
- server:
- port: 8083
-
- spring:
- application:
- # 会自动根据服务名拉取data-id对应的配置文件.如果data-id跟服务名不一致 就需要手动指定data-id
- # 跟服务名相同的data-id的配置文件,称之为默认的配置文件
- # 除了默认的配置文件,其他配置文件必须写上后缀
- name: config-client
- cloud:
- nacos:
- #注册中心
- discovery:
- server-addr: 127.0.0.1:8848
- # username: nacos
- # password: nacos
- #配置中心
- config:
- prefix: ${spring.application.name}
- #指定nacos配置中心地址
- server-addr: 127.0.0.1:8848
- file-extension: yml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties
- #namespace: ee98175d-fa34-4bd1-a732-e15c5cb352d6 # 使用的 nacos 的命名空间,默认为 null
- group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
- # 共享配置集数组
- shared-configs:
- - data-id: config-redis.yml
- group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
- refresh: true # 是否自动刷新配置,默认为 false
SpringBoot默认支持properties和YAML两种格式的配置文件。
bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使 用来配置application.yml中使用到参数等
application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用 的公共参数等。
bootstrap.yml 先于 application.yml 加载
- package com.jmh.config_client;
-
- import lombok.Data;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- import org.springframework.context.annotation.Configuration;
-
- @SpringBootApplication
- @EnableDiscoveryClient
- @SuppressWarnings("all")
- public class ConfigClientApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(ConfigClientApplication.class, args);
- }
-
- /*对象形式获取nacos配置文件里面的属性*/
- @Configuration
- @ConfigurationProperties(prefix = "email")
- @Data
- public class EmailProperties{
- private String host;
- private String port;
- private String username;
- private String userpwd;
- }
-
- }
- package com.jmh.config_client.controller;
-
- import com.jmh.config_client.ConfigClientApplication;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.cloud.context.config.annotation.RefreshScope;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- /**
- * @author 蒋明辉
- * @data 2022/11/6 14:05
- */
- @RestController
- @RefreshScope
- @SuppressWarnings("all")
- public class TestController {
-
- /*属性形式获取nacos里面配置文件的属性*/
- @Value("${redis.host}")
- private String host;
- @Value("${redis.port}")
- private String port;
-
- @Autowired
- private ConfigClientApplication.EmailProperties emailProperties;
-
-
- @RequestMapping("/run")
- public String email(){
- StringBuffer str=new StringBuffer();
- str.append("email:"+emailProperties);
- str.append("redis:"+host+",");
- str.append(port);
- return str.toString();
- }
-
-
- }
@RefreshScope 实现配置实时更新