Spring Cloud Config на основе Git создан очень быстро

Java задняя часть Spring Cloud
Spring Cloud Config на основе Git создан очень быстро

0. Прочитав эту статью, вы узнаете

  • Как создать сервер Spring Cloud Config на основе Git

1 Обзор

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

Эта схема управления конфигурацией может быть изменена во время работы приложения с помощью контроля версий Git. Хотя он очень подходит для приложений Spring, используются все поддерживаемые форматы файлов конфигурации, а такжеEnvironment,PropertySourceили@Valueи т. д., но его можно использовать в любой среде с любым языком программирования.

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

2. Настройки проекта и зависимости

Сначала давайте создадим два новых проекта Maven. Зависимости проекта сервера следующие:

<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>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Зависимости клиентского проекта следующие:

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

3. Реализация сервера конфигурации

Основная часть приложения — это класс конфигурации, точнее, класс конфигурации.@SpringBootApplication-- автоматически настраивает аннотации@EnableConfigServerИмпортируйте все необходимые настройки.

@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
    
    public static void main(String[] arguments) {
        SpringApplication.run(ConfigServer.class, arguments)。
    }
}

Теперь нам нужно настроить порт, который прослушивает сервер, и Git-url, который предоставляет содержимое конфигурации контроля версий. Последний может использовать такие протоколы, как http, ssh или простой файл в локальной файловой системе.

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

нам также нужноapplication.propertiesЧжунвэйBasic-AuthenticationЗадайте имя пользователя и пароль, чтобы избежать автоматической генерации пароля при каждом перезапуске приложения.

server.port=8888
spring.cloud.config.server.git.uri=ssh://localhost/config-repo
spring.cloud.config.server.git.clone-on-start=true
spring.security.user.name=jayxu
spring.security.user.password=s3cr3t

4. Git-репозиторий как хранилище конфигурации

Чтобы завершить наш сервер, мы должны инициализировать репозиторий Git по настроенному URL-адресу, создать несколько новых файлов свойств.

Имя конфигурационного файла как обычноеapplication.propertiesТот же состав, но с названием конфигурации вместоapplication, такие как свойства клиентаspring.application.nameзначение, за которым следует тире и активный профиль.

Например:

$> git init
$> echo 'user.role=Developer' > config-client-development.properties
$> echo 'user.role=User'      > config-client-production.properties
$> git add .
$> git commit -m 'Initial config-client properties'

Совет: если вы столкнулись с проблемами аутентификации, связанными с ssh, дважды проверьте ~/.ssh/known_hosts и ~/.ssh/authorized_keys на вашем ssh-сервере!

5. Конфигурация запроса

Теперь мы можем запустить наш сервер. API конфигурации на основе Git, предоставляемый нашим сервером, можно запросить по следующим путям.

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

Где заполнитель {метка} относится к ветке Git, {приложение} относится к имени клиентского приложения, а {профиль} относится к текущему активному профилю приложения клиента.

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

$> curl http://jayxu:s3cr3t@localhost:8888/config-client/development/master

6. Реализация клиента

Далее займемся клиентской частью. Это будет очень простое клиентское приложение.

Для того, чтобы получить наш сервер, конфигурация должна быть помещена вapplication.propertiesв файле. Spring Boot 2.4 представляет новый способ использованияspring.config.importproperties для загрузки данных конфигурации, которые теперь являются способом привязки к серверу конфигурации по умолчанию.

@SpringBootApplication
@RestController
public class ConfigClient {
    
    @Value("${user.role}")
    private String role;

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

    @GetMapping(
      value = "/test/{username}",  
      produces = MediaType.TEXT_PLAIN_VALUE)
    public String test(@PathVariable("username") String username) {
        return String.format("Hello!
          You're %s and you'll become a(n) %s...\n", username, role);
    }
}

В дополнение к имени приложения мы также включили активный профиль и сведения о подключении в application.properties.

spring.application.name=config-client
spring.profiles.active=development
spring.config.import=optional:configserver:http://jayxu:s3cr3t@localhost:8888

Это подключится к серверу конфигурацииhttp://localhost:8888, также будет использовать HTTP при установлении соединения. Мы также можем использоватьspring.cloud.config.usernameа такжеspring.cloud.config.passwordВ свойствах задаются имя пользователя и пароль.

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

Чтобы проверить, правильно ли получена конфигурация с нашего сервера и роль введена в наш метод Controller, мы просто используем следующую команду после запуска клиента:

$> curl http://localhost:8080/test/JayXu

Наш сервер конфигурации Spring Cloud и его клиенты в настоящее время работают нормально, если ответ выглядит следующим образом.

Hello! You're JayXu and you'll become a(n) Developer...

8. Заключение

Теперь мы можем создать сервер конфигурации, который предоставляет набор файлов конфигурации из репозитория Git клиентским приложениям.