2019年7月27日 星期六

設定中心 ( SpringCloud 2.x 七)

因為每一個微服務都有一個 application.yml,這裡是做一個統合的管理

※Server 端設定


※新增一個全新的專案,放在 github 上,裡面就放一個 application.yml,內容如下:
spring:
  profiles:
    active: dev
---
spring:
  profiles: dev
  application:
    name: xxx-dev
---
spring:
  profiles: uat
  application:
    name: xxx-uat
---
spring:
  profiles: test
  application:
    name: xxx-test


※ 連 --- 也不能省略

※spring.profiles.active 還可以配合 @Profile 使用



※新增一個 module,增加 pom

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>




※application.yml
server:
  port: 1111
spring:
  application:
    name: config-center
  cloud:
    config:
      server:
        git:
          uri: https://github.com/bruce12452002/SpringCloudConfigCenterPractice.git # git網址


※和 uri 同層的還有 username 和 password,是 github 的帳號和密碼,但本來 git clone 就不用打帳號密碼,所以沒有要 push 的話,可以不用寫

※uri 一打,啟動後的控製台就沒有預設的 8888 port 了

※main 方法增加 @EnableConfigServer,然後啟動測試看看

※hosts 增加 127.0.0.1       config.ooo1111 來模擬

※打上如下的網址,即可看到結果:
http://config.ooo1111:1111/application-dev.yml
http://config.ooo1111:1111/master/application-dev.yml

spring:
  application:
    name: xxx-dev
  profiles:
    active: dev



http://config.ooo1111:1111/application-uat.yml
spring:
  application:
    name: xxx-uat
  profiles:
    active: dev



http://config.ooo1111:1111/application-xxx.yml
spring:
  profiles:
    active: dev

※格式不是亂打的,看官網,label 是分支的意思



※Client 端設定


※在github 增加 abcxxx.yml,內容如下:
spring:
  profiles:
    active: dev
---
server:
  port: 8001
spring:
  profiles: dev
  application:
    name: my-config-dev
eureka:
  client:
    service-url:
      defaultZone: http://xxx.ooo9051:9051/eureka
---
server:
  port: 8002
spring:
  profiles: uat
  application:
    name: my-config-uat
eureka:
  client:
    service-url:
      defaultZone: http://xxx.ooo9051:9051/eureka
---
server:
  port: 8003
spring:
  profiles: test
  application:
    name: my-config-test
eureka:
  client:
    service-url:
      defaultZone: http://xxx.ooo9051:9051/eureka




※新建一個 model,加入 pom
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>


※父 pom 已經有 spring-cloud-starter-config,所以不用加


※寫一個測試的方法
@RestController
public class ClientConfigInfo {
    @Value("${spring.application.name}")
    private String appName;
    
    @Value("${eureka.client.service-url.defaultZone}")
    private String eurekaServerName;
    
    @Value("${server.port}")
    private Integer port;
    
    @GetMapping("/configInfo")
    public String getConfigInfo() {
        StringBuilder sb = new StringBuilder();
        sb.append("appName=").append(appName)
        .append(", eurekaServerName=").append(eurekaServerName)
        .append(", port=").append(port);
        return sb.toString();
    }
}




※以下只能寫在 bootstrap.yml
spring:
  cloud:
    config:
      name: abcxxx # 讀 github 的 yml,但不能寫副檔名
      profile: dev
      label: master
      uri: http://config.ooo1111:1111  # 找 config 伺服器





※測試

hosts 增加 127.0.0.1       config-client.ooo 模擬,不能用「_」,會報錯

啟動時控製台出現以下訊息:


 ※表示連到了 8003,然後在網址打 http://config-client.ooo:8003/configInfo,即可看到結果

※修改 bootstrap.yml 裡的 spring.cloud.config.profile,只要 github 有的,重新啟動後即可抓到新的設定

沒有留言:

張貼留言