Spring Cloud Config: внешнее централизованное управление конфигурацией

Java
Spring Cloud Config: внешнее централизованное управление конфигурацией

Адрес фактического проекта электронной коммерции SpringBoot (20k+star):GitHub.com/macro-positive/…

Резюме

Spring Cloud Config может обеспечить централизованную внешнюю поддержку конфигурации для приложений в микросервисной архитектуре.Он разделен на две части: серверную и клиентскую.В этой статье будет подробно рассказано о его использовании.

Введение в конфигурацию Spring Cloud

Spring Cloud Config разделен на две части: серверную и клиентскую. Сервер называется распределенным центром конфигурации, представляющим собой независимое приложение, которое может получать информацию о конфигурации из репозитория конфигурации и предоставлять ее клиентам. Клиент может получить информацию о конфигурации через центр конфигурации и загрузить конфигурацию при запуске. Центр конфигурации Spring Cloud Config по умолчанию использует Git для хранения информации о конфигурации, поэтому он естественным образом поддерживает управление версиями информации о конфигурации, а клиенты Git можно использовать для простого управления информацией о конфигурации и доступа к ней.

Подготовьте информацию о конфигурации в репозитории Git.

Поскольку Spring Cloud Config требует репозитория Git, который хранит информацию о конфигурации, давайте сначала добавим хороший файл конфигурации в репозитории Git и продемонстрировать свою функцию, адрес GIT Warehouse:git ee.com/macro-positive/….

Настройте структуру каталогов репозитория

Информация о конфигурации в главной ветке

  • config-dev.yml:
config:
  info: "config info for dev(master)"
  • config-test.yml:
config:
  info: "config info for test(master)"
  • config-prod.yml:
config:
  info: "config info for prod(master)"

Информация о конфигурации в ветке dev

  • config-dev.yml:
config:
  info: "config info for dev(dev)"
  • config-test.yml:
config:
  info: "config info for test(dev)"
  • config-prod.yml:
config:
  info: "config info for prod(dev)"

Создайте модуль config-сервера

Здесь мы создаем модуль config-server, чтобы продемонстрировать функциональность Spring Cloud Config в качестве центра конфигурации.

Добавьте связанные зависимости в pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

Настроить в application.yml

server:
  port: 8901
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git: #配置存储配置信息的Git仓库
          uri: https://gitee.com/macrozheng/springcloud-config.git
          username: macro
          password: 123456
          clone-on-start: true #开启启动时直接从git获取配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/

Добавьте аннотацию @EnableConfigServer в класс запуска, чтобы включить функцию центра конфигурации.

@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }

}

Получить информацию о конфигурации через config-server

Здесь мы используем config-server, чтобы продемонстрировать, как получить информацию о конфигурации.

Формат доступа для получения информации о профиле

# 获取配置信息
/{label}/{application}-{profile}
# 获取配置文件信息
/{label}/{application}-{profile}.yml

Объяснение заполнителей

  • приложение: представляет имя приложения, по умолчанию это spring.application.name в файле конфигурации, если настроено spring.cloud.config.name, это имя;
  • label: представляет имя ветки, соответствующее spring.cloud.config.label в файле конфигурации;
  • profile: представляет имя среды, соответствующее spring.cloud.config.profile в файле конфигурации.

Получить демонстрационную информацию о конфигурации

  • Запустите службы eureka-server, config-server;

  • доступhttp://localhost:8901/master/config-devполучить информацию о конфигурации среды dev на ветке ветви;

  • доступhttp://localhost:8901/master/config-dev.ymlЧтобы получить информацию о файле конфигурации среды dev в ветке master, сравнив приведенную выше информацию, можно увидеть, что информация о конфигурации и информация о файле конфигурации не являются одним и тем же понятием;

Создайте модуль config-client

Мы создаем модуль config-client для получения конфигурации с config-server.

Добавьте связанные зависимости в pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Настроить в bootstrap.yml

server:
  port: 9001
spring:
  application:
    name: config-client
  cloud:
    config: #Config客户端配置
      profile: dev #启用配置后缀名称
      label: dev #分支名称
      uri: http://localhost:8901 #配置中心地址
      name: config #配置文件名称
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/

Добавьте класс ConfigClientController для получения конфигурации

/**
 * Created by macro on 2019/9/11.
 */
@RestController
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}

Демонстрация получения конфигурации из центра конфигурации

  • Запустите службу config-client;

  • доступhttp://localhost:9001/configInfo, вы можете получить конфигурацию среды разработки в ветке разработки;

config info for dev(dev)

Получить конфигурацию в подкаталоге

Мы можем не только хранить конфигурацию каждого проекта в разных Git-репозиториях, но и хранить конфигурации нескольких проектов в одном Git-репозитории, при этом будет использоваться конфигурация поиска информации о конфигурации в подкаталогах.

  • Во-первых, нам нужно добавить соответствующую конфигурацию в config-server для поиска конфигурации в подкаталоге.Здесь мы используем заполнитель приложения, что означает, что для разных приложений мы ищем конфигурацию из подкаталога, соответствующего имени приложения, например as config Конфигурация в подкаталоге соответствует приложению config;
spring:
  cloud:
    config:
      server:
        git: 
          search-paths: '{application}'
  • доступhttp://localhost:9001/configInfoПосле тестирования можно обнаружить, что информация о конфигурации в подкаталоге config получена.
config info for config dir dev(dev)

обновить конфигурацию

Когда информация о конфигурации в репозитории Git изменяется, мы можем обновить информацию о конфигурации клиента через конечную точку обновления SpringBoot Actuator.Следующие изменения необходимо внести в config-client.

  • Добавьте зависимости актуатора в pom.xml:
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • Откройте конечную точку обновления в bootstrap.yml:
management:
  endpoints:
    web:
      exposure:
        include: 'refresh'
  • Добавьте аннотацию @RefreshScope в класс ConfigClientController, чтобы обновить конфигурацию:
/**
 * Created by macro on 2019/9/11.
 */
@RestController
@RefreshScope
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}
  • После перезапуска config-client вызовите конечную точку обновления, чтобы обновить конфигурацию:

  • доступhttp://localhost:9001/configInfoТестируя, вы можете обнаружить, что информация о конфигурации была обновлена.
update config info for config dir dev(dev)

Добавить проверку подлинности безопасности в Центре конфигурации

Мы можем добавить аутентификацию безопасности в центр конфигурации, интегрировав SpringSecurity.

Создайте модуль config-security-server

  • Добавьте связанные зависимости в pom.xml:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • Настройте в application.yml:
server:
  port: 8905
spring:
  application:
    name: config-security-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/macrozheng/springcloud-config.git
          username: macro
          password: 123456
          clone-on-start: true #开启启动时直接从git获取配置
  security: #配置用户名和密码
    user:
      name: macro
      password: 123456
  • Запустите службу config-security-server.

Изменить конфигурацию config-client

  • Добавьте файл конфигурации bootstrap-security.yml, в основном для настройки имени пользователя и пароля центра конфигурации:
server:
  port: 9002
spring:
  application:
    name: config-client
  cloud:
    config:
      profile: dev #启用配置后缀名称
      label: dev #分支名称
      uri: http://localhost:8905 #配置中心地址
      name: config #配置文件名称
      username: macro
      password: 123456
  • Используйте bootstrap-security.yml для запуска службы config-client;

  • доступhttp://localhost:9002/configInfoПротестируйте и убедитесь, что информация о конфигурации может быть получена.

config info for dev(dev)

построение кластера config-sever

В микросервисной архитектуре все службы доступны из конфигурации центра распределения, когда центр конфигурации не работает, возникает очень серьезная проблема, давайте настроим центр конфигурации кластера с двумя узлами, чтобы решить эту проблему.

  • Начать два конфигуратора, работающих на каждом порте 8902 и 8903;

  • Добавьте файл конфигурации bootstrap-cluster.yml config-client, в основном для добавления конфигурации получения адреса центра конфигурации из центра регистрации и удаления конфигурации uri центра конфигурации:

spring:
  cloud:
    config:
      profile: dev #启用环境名称
      label: dev #分支名称
      name: config #配置文件名称
      discovery:
        enabled: true
        service-id: config-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
  • Запустите службу config-client с bootstrap-cluster.yml, и реестр отобразит следующую информацию:

  • доступhttp://localhost:9003/configInfo, обнаружил, что config-client может получить информацию о конфигурации.
config info for config dir dev(dev)

Используемые модули

springcloud-learning
├── eureka-server -- eureka注册中心
├── config-server -- 配置中心服务
├── config-security-server -- 带安全认证的配置中心服务
└── config-client -- 获取配置的客户端服务

Адрес исходного кода проекта

GitHub.com/macro-positive/…

публика

проект торгового центраПолный набор учебных пособий сериализуется,Обратите внимание на публичный аккаунтПолучите это прямо сейчас.

公众号图片