目錄
1.?SpringCloud Config
2. Nacos_Config
3.?使用 Nacos Config 添加/配置 外部配置文件
3.1 添加/配置命名空間
3.2 添加/配置 外部配置文件
3.3 外部文件克隆到其他空間
4. 新建子模塊【config_client】
4.1 父模塊pom文件依賴結(jié)構(gòu)
? ? ? ? ?4.2 子模塊pom文件結(jié)構(gòu)
4.3 配置子模塊 bootstrap.yml文件
4.4 配置子模塊啟動(dòng)類
4.5 編寫controller接口測(cè)試
4.6 啟動(dòng)項(xiàng)目測(cè)試接口
4.6.1 Nacos_config外部配置文件數(shù)據(jù)??
4.6.2 測(cè)試接口獲取到的nacos_config外部配置文件數(shù)據(jù)?
4.6.3?切換命名空間
前言
? 了解SpringCloud 基礎(chǔ)使用與Nacos 請(qǐng)查閱下篇文章
? SpringCloud 使用與Nacos_JoneClassMate的博客-CSDN博客
? 了解SpringCloud 遠(yuǎn)程通信?請(qǐng)查閱下篇文章?
? SpringCloud 遠(yuǎn)程調(diào)用_JoneClassMate的博客-CSDN博客
1.?SpringCloud Config
微服務(wù)意味著要將單體應(yīng)用中的業(yè)務(wù)拆分成一個(gè)個(gè)子服務(wù),每個(gè)服務(wù)的粒度相對(duì)較小,因此系統(tǒng)中會(huì)出現(xiàn)大 量的服務(wù)。
由于每個(gè)服務(wù)都需要必要的配置信息才能運(yùn)行,所以一套集中式的,動(dòng)態(tài)的配置管理設(shè)施是必不可少的。 Spring Cloud 提供了 ConfigServer來解決這個(gè)問題.
Spring Cloud Config 為微服務(wù)架構(gòu)中的微服務(wù)提供集中化的外部配置支持,配置服務(wù)器為各個(gè)不同微服 務(wù)應(yīng)用的所有環(huán)境提供了一個(gè)中心化的外部配置。
SpringCloud Config 分為服務(wù)端和客戶端兩部分。?
服務(wù)端也稱為分布式配置中心,他是一個(gè)獨(dú)立的微服務(wù)應(yīng)用,用來連接配置服務(wù)器并為客戶端提供獲取配置 信息,加密/解密 信息等訪問接口。
客戶端則是通過制定的配置中心來管理應(yīng)用資源,以及與業(yè)務(wù)相關(guān)的配置內(nèi)容,并在啟動(dòng)的時(shí)候從配置中心 獲取和加載配置信息配置服務(wù)器默認(rèn)采用git來存儲(chǔ)配置信息,這樣就有助于對(duì)環(huán)境配置進(jìn)行版本管理,并 且可以通過git客戶端工具來方便的管理和訪問配置內(nèi)容。
?一個(gè)使用微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)可能會(huì)包括成百上千個(gè)微服務(wù),配置各部相同,需求各不相同:
- 不同環(huán)境不同配置:例如數(shù)據(jù)源在不同的環(huán)境(開發(fā),測(cè)試,生產(chǎn))是不同的,可以通過配置中心
- 運(yùn)行期間可以動(dòng)態(tài)調(diào)整。例如根據(jù)各個(gè)微服務(wù)的負(fù)載狀況,動(dòng)態(tài)調(diào)整數(shù)據(jù)源連接池大小或者熔斷閥 值,并且調(diào)整時(shí)不停止微服務(wù)(配置修改后可以自動(dòng)更新)
2. Nacos_Config
Spring Cloud Alibaba Nacos Config Nacos 提供用于存儲(chǔ)配置和其他元數(shù)據(jù)的 key/value 存儲(chǔ),為分布 式系統(tǒng)中的外部化配置提供服務(wù)器端和客戶端支持。
使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 應(yīng)用的外 部屬性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客戶端和服務(wù)器上的概念與 Spring Environment 和 PropertySource 有著一致的抽象
在特殊的 bootstrap 階段,配置被加載到 Spring 環(huán)境中。當(dāng)應(yīng)用程序通過部署管道從開發(fā)到測(cè)試再到生 產(chǎn)時(shí),您可以管理這些環(huán)境之間的配置,并確保應(yīng)用程序具有遷移時(shí)需要運(yùn)行的所有內(nèi)容。?
3.?使用 Nacos Config 添加/配置 外部配置文件
? ? ?3.1 添加/配置命名空間
?
?
- 添加完成的結(jié)構(gòu)?
?
? ? ?3.2 添加/配置 外部配置文件
?
?
- 添加完成的結(jié)構(gòu)?
?
? ? ? 3.3 外部文件克隆到其他空間
?
?
4. 新建子模塊【config_client】
- 因?yàn)樾【幨窃诟改K里面一個(gè)子模塊里面完成的配置 也可以在單個(gè)模塊里面完成
? ? 4.1 父模塊pom文件依賴結(jié)構(gòu)
<?xml version="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.0</modelVersion>
<groupId>com.jmh</groupId>
<artifactId>springcloud01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--pom代表這個(gè)是個(gè)父工程-->
<packaging>pom</packaging>
<!--指向兒子-->
<modules>
<module>nacos_provider</module>
<module>nacos_consumer</module>
<module>nacos_commons</module>
<module>config_client</module>
</modules>
<name>springcloud01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--提供版本-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring-boot.version>2.4.1</spring-boot.version>
<spring-cloud.version>2020.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<!--提供依賴-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--注冊(cè)與發(fā)現(xiàn)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--遠(yuǎn)程通信-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--負(fù)載均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--對(duì)象賦值依賴-->
<dependency>
<groupId>ma.glasnost.orika</groupId>
<artifactId>orika-core</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--子模塊nacos_commons依賴-->
<dependency>
<groupId>com.jmh</groupId>
<artifactId>nacos_commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<!--提供依賴版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
? ? 4.2 子模塊pom文件結(jié)構(gòu)
<?xml version="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.0</modelVersion>
<groupId>com.jmh</groupId>
<artifactId>config_client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>config_client</name>
<description>Demo project for Spring Boot</description>
<!--指向父親-->
<parent>
<artifactId>springcloud01</artifactId>
<groupId>com.jmh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
? ? 4.3 配置子模塊 bootstrap.yml文件
server:
port: 8083
spring:
application:
# 會(huì)自動(dòng)根據(jù)服務(wù)名拉取data-id對(duì)應(yīng)的配置文件.如果data-id跟服務(wù)名不一致 就需要手動(dòng)指定data-id
# 跟服務(wù)名相同的data-id的配置文件,稱之為默認(rèn)的配置文件
# 除了默認(rèn)的配置文件,其他配置文件必須寫上后綴
name: config-client
cloud:
nacos:
#注冊(cè)中心
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 的文件拓展名,同時(shí)也是 Nacos 配置集的配置格式,默認(rèn)為 properties
#namespace: ee98175d-fa34-4bd1-a732-e15c5cb352d6 # 使用的 nacos 的命名空間,默認(rèn)為 null
group: DEFAULT_GROUP # 使用的 Nacos 配置分組,默認(rèn)為 DEFAULT_GROUP
# 共享配置集數(shù)組
shared-configs:
- data-id: config-redis.yml
group: DEFAULT_GROUP # 使用的 Nacos 配置分組,默認(rèn)為 DEFAULT_GROUP
refresh: true # 是否自動(dòng)刷新配置,默認(rèn)為 false
SpringBoot默認(rèn)支持properties和YAML兩種格式的配置文件。
?
bootstrap.yml(bootstrap.properties)用來程序引導(dǎo)時(shí)執(zhí)行,應(yīng)用于更加早期配置信息讀取,如可以使 用來配置application.yml中使用到參數(shù)等
application.yml(application.properties) 應(yīng)用程序特有配置信息,可以用來配置后續(xù)各個(gè)模塊中需使用 的公共參數(shù)等。
bootstrap.yml 先于 application.yml 加載
? ? 4.4 配置子模塊啟動(dòng)類
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);
}
/*對(duì)象形式獲取nacos配置文件里面的屬性*/
@Configuration
@ConfigurationProperties(prefix = "email")
@Data
public class EmailProperties{
private String host;
private String port;
private String username;
private String userpwd;
}
}
? ? 4.5 編寫controller接口測(cè)試
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 實(shí)現(xiàn)配置實(shí)時(shí)更新
? ? 4.6 啟動(dòng)項(xiàng)目測(cè)試接口
- ?可測(cè)試接口獲取到的外部配置文件的數(shù)據(jù)是否一致
? ? ? ?4.6.1 Nacos_config外部配置文件數(shù)據(jù)??
?? ? ? 4.6.2 測(cè)試接口獲取到的nacos_config外部配置文件數(shù)據(jù)?
?文章來源:http://www.zghlxwxcb.cn/news/detail-429079.html
? ? ? ?4.6.3?切換命名空間
- 復(fù)制命名空間步驟?
?文章來源地址http://www.zghlxwxcb.cn/news/detail-429079.html
- ?復(fù)制好的命名空間粘貼到子項(xiàng)目bootstrap.yml文件
- ?spring.cloud.nacos.config.namespace
到了這里,關(guān)于SpringCloud 配置中心【Nacos_Config】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!