Адрес фактического проекта электронной коммерции 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, сравнив приведенную выше информацию, можно увидеть, что информация о конфигурации и информация о файле конфигурации не являются одним и тем же понятием;
- доступhttp://localhost:8901/master/config-test.ymlЧтобы получить информацию о файле конфигурации тестовой среды в ветке master:
- доступhttp://localhost:8901/dev/config-dev.ymlЧтобы получить информацию о файле конфигурации среды dev в ветке dev:
Создайте модуль 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 -- 获取配置的客户端服务
Адрес исходного кода проекта
публика
проект торгового центраПолный набор учебных пособий сериализуется,Обратите внимание на публичный аккаунтПолучите это прямо сейчас.