Spring Cloud Config配置中心

配置中心

配置中心的由來

配置中心被用做集中管理不一樣環境和不一樣集羣配置,以及在修改配置以後能將修改的配置即便的更新到系統。git

配置中心具有的功能

  • Open API
  • 業務無關
  • 配置生效監控
  • 一致性K-V存儲
  • 統一配置實時推送
  • 配合灰度與更新
  • 配置全局恢復,備份與歷史
  • 高可用集羣

Config配合git的工做原理

配置的客戶端在啓動的時候活像配置服務端發請求,服務端在接收到客戶端的請求以後會在以前配置好的地址去git殘酷拉去一份配置到本地,建立一個臨時文件,這個目錄就是一個git的本地倉目錄,而後服務端讀取本地文件返回給客戶端。這樣作的好處就是,當git服務器故障或者網路出現異常後仍然能夠工做。web

例子

服務端和客戶端公共的依賴以下:spring

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
複製代碼

server端的依賴以下:bootstrap

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
複製代碼

服務端的配置:安全

spring:
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/chendom/SpringCloudConfig.git
          username: xx
          password: xx
          search-paths: config
  application:
    name: config-server
server:
  port: 8098
複製代碼

啓動類:服務器

@SpringBootApplication
@EnableConfigServer
public class ConfigGitApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigGitApplication.class,args);
    }
}
複製代碼

客戶端的依賴以下:app

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-client</artifactId>
    </dependency>
複製代碼

客戶端配置以下:dom

server:
  port: 8099
spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      uri: http://localhost:8098
      name: client-config
      profile: dev
複製代碼

測試類的代碼spring-boot

@RestController
@RequestMapping("/demo")
public class DemoController {

@Value("${springcloud.configserver}")
 private String value;

@RequestMapping("/getValue")
public String getValue(){
    return value;
}
}
複製代碼

分別啓動服務端和客戶端微服務

訪問http://localhost:8098/client-config/dev/master

訪問http://localhost:8099/demo/getValue

手動刷新

pom依賴:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-client</artifactId>
    </dependency>
    <!--簡單的安全和端點開放-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>
</project>
複製代碼

bootstrap.yml配置文件

server:
  port: 8100
spring:
  application:
    name: refresh-config-client
  cloud:
    config:
      label: master
      uri: http://localhost:8098
      name: client-config
      profile: dev
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always
複製代碼

請求

@RestController
@RequestMapping("/demo")
@RefreshScope//刷新註解
public class DemoController {

@Value("${springcloud.configserver}")
 private String value;

@RequestMapping("/getValue")
public String getValue(){
    return value;
}
}
複製代碼

咱們知道以前的配置是這樣的 springcloud: configserver: this is test dev

如今該成以下圖所示的樣子:

此時若是沒有刷新仍是訪問http://localhost:8100/demo/getValue仍是不會有變化

此時咱們能夠訪問 Post:http://localhost:8100/actuator/refresh

訪問 http://localhost:8100/demo/getValue

以上就完成了手動刷新的例子,可是微服務通常服務都不少,若是有個別的例子沒有進行刷新就極可能出現錯誤,開鎖因此就須要使用到自動刷新

相關文章
相關標籤/搜索