Spring config server

server

  1. 添加依賴
dependencies {
    compile 'org.springframework.cloud:spring-cloud-config-server'
    compile 'org.springframework.cloud:spring-cloud-starter-eureka'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
}
  1. 添加annotation
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApp.class, args);
    }
}
  1. application.yaml配置文件添加config repo
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: file://${user.home}/space/app-config
          search-paths: '{application}/{profile}'
server:
  port: 7001

上面使用的本地文件系統方式進行配置倉庫的內容管理,該方式僅用於開發和測試。在生產環境中務必搭建本身的Git配置庫。git

  1. 將config server註冊進服務發現,application.yaml
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:11111/eureka
    healthcheck:
      enabled: true
  1. 同時能夠考慮開啓actuator endpoints。
    endpoints.enabled默認true。其中/health在後面Git配置庫中有更多做用。
management:
  security:
    enabled: false

clinet

  1. 添加依賴
dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-eureka'
    compile 'org.springframework.cloud:spring-cloud-starter-config'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
}
  1. bootstrap.yml配置
spring:
  cloud:
    config:
\#      uri: http://localhost:7001
      discovery:
        enabled: true
        service-id: config-server
      fail-fast: true
  application:
    name: hello-cloud
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:local}
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:11111/eureka
    healthcheck:
      enabled: true
server:
  port: 8001

上面spring.application.name即會用在search-paths的{application},spring.profiles.active便是search-paths的{profile}。
同時從服務發現中查找config-server。若是不使用服務發現,可以使用spring.cloud.config.uri指定靜態的url。
spring.cloud.config.fail-fast用於快速驗證config server的鏈接可用狀態,防止container前期load時長過長,到後面config server才發現不能用而啓動失敗。github

  1. 添加服務發現的annotation
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }
}
  1. 開啓actuator endpoints。其中/refresh能夠對配置進行動態刷新。
management:
  context-path: /actuator
  security:
    enabled: false
  1. 寫一個支持刷新Example。
@RefreshScope
@RestController
public class HelloController {
    private final Logger logger = Logger.getLogger(getClass().getName());
    @Value("${from}")
    private String from;
    @GetMapping("/from")
    public String from(){
        return this.from;
    }
}

刷新操做

  1. 修改配置庫內from value。
  2. curl -X POST http://localhost:8001/actuator/refresh。
  3. 再次訪問http://localhost:8001/from

在config server添加多個配置庫

  1. application.yaml
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: git@github.com:XXX/app-config.git
          search-paths: '{application}/{profile}'
          passphrase: ********
          force-pull: true
          repos:
            none_prod:
              pattern:
                - '*/dev'
              uri: git@github.com:XXX/app-config.git
              searchPaths: '{application}/{profile}'
            prod:
              pattern:
                - '*/prod'
              uri: git@github.com:XXX/prod-app-config.git
              searchPaths: '{application}'
        health:
          repositories:
            none_prod:
              name: none_prod
              profiles: dev
server:
  port: 7001
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:11111/eureka
    healthcheck:
      enabled: true

spring.cloud.config.server.git.uri爲默認配置庫。 spring.cloud.config.server.health.repositories用來配置/health endpoint中健康檢查的repos。web

  1. 這裏採用使用本地ssh setting的方式。
  • 首先,本地${user.home}/.ssh下有ssh key。
  • 再次,ssh key加入ssh-agent。主要要肯定config和know_host文件中記錄。
$ eval "$(ssh-agent -s)"
\# 添加config文件
\# Host gitlab.com
\# HostName gitlab.com
\# AddKeysToAgent yes
\# UseKeychain yes
\# User TTT
\# IdentityFile ~/.ssh/id_tw_rsa
$ ssh-add -K ~/.ssh/id_tw_rsa
\# 查看agent public keys
$ ssh-add -l
  • 最後,若是key中有設置passphrase,在application.yaml必定要配置spring.cloud.config.server.git.passphrase。
相關文章
相關標籤/搜索