В своей предыдущей статье я упомянул четыре продукта/приложения для управления конфигурацией в архитектуре микросервисов. В этой статье мы объясним первый вариант (конфигурация Spring Cloud)
Что такое конфигурация spring cloud
Конфигурация Spring cloud является частью набора инструментов spring cloud для разработки облачных собственных приложений и микросервисов. Он обеспечивает серверную и клиентскую поддержку для внешних конфигураций в распределенных системах.
Проще говоря, spring cloud config – это обычный проект spring, который считывает конфигурации из централизованного хранилища конфигураций и предоставляет эти конфигурации другим приложениям (микросервисам).
Настройка сервера конфигурации.
Получить сервер конфигурации spring cloud так же просто, как создать любой другой проект spring.
- Перейдите в start.spring.io
- Задайте для имени проекта (артефакта) значение config-server и в разделе зависимости добавьте сервер конфигурации.
- Загрузите архивированный файл (config-server.zip).
- Извлечь проект
$распаковать config-server.zip
. - В классе ConfigServerApplication добавьте @enableconfigserver аннотацию.
package com.example.configserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer @SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
- Выполните следующие команды, чтобы создать локальный репозиторий git. Этот репозиторий git будет использоваться сервером spring config в качестве источника конфигурации для другой службы.
$mkdir config-repo $cd config-repo $echo "foo.property=property_dev_value" > my-service-dev.properties $echo "foo.property=property_sit_value" > my-service-sit.properties $echo "foo.property=property_prod_value" > my-service-prod.properties $git init $git add . $git commit -m"Adding configurations"
- Добавьте следующие свойства в файл
application.properties
.
spring.cloud.config.server.git.uri=file://${user.home}/config-repo spring.cloud.config.server.git.clone-on-start=true
- Создайте проект
$cd config-сервер &&чистый пакет mvn
. - Запустите проект
$java-jar target/config-сервер. Запустите проект
$java-jar target/config-сервер.
Теперь у вас есть и работает полнофункциональный сервер конфигурации.
Создание клиентского приложения spring boot.
Теперь нам нужно создать другое приложение, которое будет действовать как микросервисы, которым необходимо загрузить свою конфигурацию с нашего сервера конфигурации. Очевидно, что мы будем использовать spring boot и другую часть проекта spring cloud config (клиентская библиотека). Есть два момента, которые мы должны упомянуть здесь, прежде чем приступать к этапам создания клиента.
- Поскольку конфигурацию любого проекта обычно необходимо загружать в процессе запуска, нам необходимо изменить поведение начальной загрузки приложения. Это происходит просто путем добавления нового файла
bootstrap.properties
в каталог ресурсов. - Связующим звеном между клиентским приложением и сервером конфигурации является имя приложения. В нашем случае
мой-сервис
.
Вот шаги, необходимые для создания клиентского приложения.
- Как обычно, перейдите в start.spring.io
- задайте для имени проекта (артефакта) значение my-service.
- добавьте
клиент конфигурации
в зависимости. - Изменение
Приложение myserviceприложение.java
класс должен быть следующим
package com.example.myservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.context.config.annotation.RefreshScope; @SpringBootApplication @RefreshScope public class MyserviceApplication { public static void main(String[] args) { SpringApplication.run(MyserviceApplication.class, args); } }
- Добавьте файл
bootstrap.properties
в каталог ресурсов и запишите в него следующую конфигурацию.
server.port=8081 spring.application.name=my-service spring.cloud.config.uri=http://localhost:8080
Свойство spring.cloud.config.url
указывает на URL-адрес сервера конфигурации.
- Для тестирования мы создадим контроллер REST
Контроллер конфигурации
, введите значение из файлов свойств на сервере конфигурации (foo.property
), затем отобразите значение. Для этой цели создайте следующий класс.
package com.example.myservice; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ConfigController{ @Value("${foo.property: nothing}") private String configProperty; @GetMapping("/getConfigs") public String getConfigProperty(){ return this.configProperty; } }
- Пакет клиентского приложения
чистый пакет $mvn
- Запустите клиентское приложение
$java -jar target/моя служба. Запустите клиентское приложение
$java -jar target/моя служба. . Теперь, если вы откроете этот URL-адрес ( http://localhost:8081/getConfigs) в браузере вы должны увидеть отображаемое значение
foo.свойства - .
Если вы хотите получить конфигурацию другого профиля, вам необходимо установить свойство
spring.profiles.activeв файле
bootstrap.properties
spring.profiles.active=prod
Теперь, если вы упакуете и повторно запустите приложение, вы получите значение того же свойства из профиля prod
.
Заключительная нота.
На момент написания этой статьи я столкнулся с проблемой запуска и запуска клиента с использованием версии spring boot 2.4.0
. Мне пришлось использовать предыдущую стабильную версию 2.3.6
.
Оригинал: “https://dev.to/devfanooos/introduction-to-spring-cloud-config-52ac”