SpringCloud-Config組件使用


1.什么是Config

0.說明

1.統一配置中心組件流程圖

2.Config Server 開發

配置服務,搭建基本的springcloud項目環境,使用consul注冊中心

1.引入依賴

<!--引入統一配置中心-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>


<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.md</groupId>
    <artifactId>06-configserver7878</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>06-configserver7878</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--引入consul依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <!-- 這個包是用做健康度監控的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--引入統一配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

    </dependencies>

    <!--全局管理springcloud版本,並不會引入具體依賴-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.開啟統一配置中心服務

@SpringBootApplication
@EnableConfigServer
public class Configserver7878Application {
	public static void main(String[] args) {
		SpringApplication.run(Configserver7878Application.class, args);
	}
}

3.修改配置文件

server.port=7878
spring.application.name=configserver
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

4.直接啟動服務報錯

  • 沒有指定遠程倉庫的相關配置

5.創建遠程倉庫

  • github創建一個倉庫

6.復制倉庫地址

https://github.com/shanqiul/configserver.git

7.在統一配置中心服務中修改配置文件指向遠程倉庫地址

spring.cloud.config.server.git.uri=https://github.com/shanqiul/configserver.git
# 這個不設置報錯,現在默認是main分支
spring.cloud.config.server.git.default-label=main
#spring.cloud.config.server.git.username=       私有倉庫訪問用戶名
#spring.cloud.config.server.git.password=				私有倉庫訪問密碼

8.再次啟動統一配置中心

9.拉取遠端配置 [三種方式]

首先先寫文件,配置參數

進行測試,注意格式test-xxx

10.拉取遠端配置規則

  • label/name-profiles.yml
    label 代表去那個分支獲取 默認使用master分支 name 代表讀取那個具體的配置文件文件名稱
    `profile 代表讀取配置文件環境

11.查看拉取配置詳細信息

12.指定分支和本地倉庫位置

spring.cloud.config.server.git.basedir=F:\Java\code\springcloud\06-configserver7878\src\main\resources\localresp 		#一定要是一個空目錄,在首次會將該目錄清空
spring.cloud.config.server.git.default-label=main   #指定使用遠程倉庫中那個分支中內容

3.Config Client 開發

還是搭建一個基本的springcloud項目

1.項目中引入config client依賴

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.md</groupId>
    <artifactId>06-configclient7879</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>06-configclient7879</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--引入consul依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <!-- 這個包是用做健康度監控的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        
        <!--引入hystrix-->
        <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

         <!--config client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

    </dependencies>
    <!--全局管理springcloud版本,並不會引入具體依賴-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.編寫配置文件

spring.cloud.config.discovery.enabled=true                #開啟統一配置中心服務
spring.cloud.config.discovery.service-id=configserver     #指定統一配置服務中心的服務唯一標識
spring.cloud.config.label=main   						#指定從倉庫的那個分支拉取配置	
spring.cloud.config.name=client							#指定拉取配置文件的名稱
spring.cloud.config.profile=dev							#指定拉取配置文件的環境

3.遠程倉庫創建配置文件

- client.properties							[用來存放公共配置]
	spring.application.name=configclient
	spring.cloud.consul.host=localhost
	spring.cloud.consul.port=8500

- client-dev.properties  			[用來存放研發相關配置][注意:這里端口為例,以后不同配置分別存放]
	server.port=9099

- client-prod.properties							[用來存放生產相關配置]
	server.port=9098

注意:
此時再訪問client-dev.properties,就會包括client.properties里面得內容
client.properties用來存放一些公共得配置,每個client中都存在得內容

4.啟動客戶端服務進行遠程配置拉取測試

  • 直接啟動過程中發現無法啟動直接報錯

報錯原因

  • 項目中目前使用的是application.properties啟動項目,使用這個配置文件在springboot項目啟動過程中不會等待遠程配置拉取,直接根據配置文件中內容啟動,因此當需要注冊中心,服務端口等信息時,遠程配置還沒有拉取到,所以直接報錯

解決方案

  • 應該在項目啟動時先等待拉取遠程配置,拉取遠程配置成功之后再根據遠程配置信息啟動即可,為了完成上述要求springboot官方提供了一種解決方案,就是在使用統一配置中心時應該將微服務的配置文件名修改為bootstrap.(properties|yml),

bootstrap.properties作為配置啟動項目時,會優先拉取遠程配置,遠程配置拉取成功之后根據遠程配置啟動當前應用。

5.再次啟動服務

4.手動配置刷新

1.說明

  • 在生產環境中,微服務可能非常多,每次修改完遠端配置之后,不可能對所有服務進行重新啟動,這個時候需要讓修改配置的服務能夠刷新遠端修改之后的配置,從而不要每次重啟服務才能生效,進一步提高微服務系統的維護效率。在springcloud中也為我們提供了手動刷新配置和自動刷新配置兩種策略,這里我們先試用手動配置文件刷新。

2.在config client端加入刷新暴露端點

management.endpoints.web.exposure.include=*            #開啟所有web端點暴露  [推薦使用這種]

3.在需要刷新代碼的類中加入刷新配置的注解

@RestController
@RefreshScope
@Slf4j
public class TestController {
    @Value("${name}")
    private String name;
    @GetMapping("/test/test")
    public String test(){
      log.info("當前加載配置文件信息為:[{}]",name);
      return name;
    }
}

4.在遠程配置中加入name並啟動測試

5.啟動之后直接訪問

6.修改遠程配置

7.修改之后在訪問

  • 發現並沒有自動刷新配置?
  • 必須調用刷新配置接口才能刷新配置

8.手動調用刷新配置接口

再次訪問發現配置已經成功刷新


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM