Статьи

Конфигурация Spring Cloud — Внешняя настройка приложения

Это руководство посвящено настройке Spring Cloud. Здесь мы рассмотрим, как нам удается обслуживать и хранить свойства распределенных внешних конфигураций, используя конфигурацию Spring Cloud в различных приложениях для различных сред, таких как dev, local, prod и т. Д. Сначала мы будем разработать простое облачное приложение для вывода свойств конфигурации приложения с помощью облачной конфигурации, а затем расширить это же приложение, чтобы использовать сервер обнаружения для регистрации приложения, обновления конфигурации во время выполнения и шифрования и дешифрования конфиденциальных свойств.

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

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

Spring cloud config — это веб-приложение, которое предоставляет конечным точкам REST доступ к свойствам конфигурации. Он поддерживает несколько выходных форматов, таких как JSON, properties и yaml. Поддерживаются различные хранилища данных: git (по умолчанию), SVN, файловая система. В нашем примере мы будем использовать git в качестве резервного хранилища для наших свойств конфигурации.

Настройка Git Backened Store

Прежде всего, давайте создадим наш резервный магазин. Мы будем использовать github для хранения наших свойств, и для этого я создал простой проект github для хранения конфигураций. Он имеет в основном 3 .properties файла. application.properties для хранения глобальных свойств, spring-cloud-config-client.properties для хранения глобальных свойств для приложения spring-cloud-config-client и аналогичным образом у нас есть spring-cloud-config-client-local.properties для хранения локальных свойств для приложения spring-cloud-config-client

spring-cloud-config-client.properties

1
2
server.contextPath=spring-cloud-config-client
test.property=property from cloud config

spring-cloud-config-client-local.properties

1
test.local.property=test local property

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

Внедрение сервера Spring Cloud Config

Это будет простое приложение для весенней загрузки. Для этой реализации сначала загрузите демонстрационное весеннее загрузочное приложение из start.spring.io с указанными ниже конфигурациями. Мы будем использовать конфигурацию сервера обнаружения позже в этом руководстве.

Теперь импортируйте его в IDE, и вы можете найти следующие конфигурации maven.

pom.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
 
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Давайте определим наши конфигурации приложения для этого приложения. Чтобы упростить наш пример, у нас не будет конфигурации, связанной с сервером обнаружения. Ниже приведен URL-адрес git, который мы обсуждали в предыдущем разделе.

application.properties

1
2
server.port=8888
spring.cloud.config.server.git.uri=https://github.com/only2dhir/config-repo.git

Ниже приведена реализация нашего основного приложения для весенней загрузки. На простой аннотации — @EnableConfigServer включит необходимую конфигурацию для конфигурации весеннего облака. Примечание: — Перед запуском этого класса вы можете прокомментировать зависимость eureka в pom.xml, чтобы избежать ненужных журналов ошибок, так как сейчас мы не делали конфигураций, связанных с сервером обнаружения.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
package com.devglan.springcloudconfigexample;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
 
@SpringBootApplication
@EnableConfigServer
public class SpringCloudConfigExampleApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigExampleApplication.class, args);
    }
}

Запуск над классом в качестве Java-приложения предоставит следующие конечные точки REST.

1
2
3
4
5
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

Здесь application — это название приложения. Например, если у нас есть имя нашего клиентского приложения в виде spring-cloud-config-client, то URL-адрес конечных точек становится spring-cloud-config-client-dev.properties, где dev — активный профиль весенней загрузки. Метка здесь — это git brnach, который это необязательный параметр.

Внедрение клиента Spring Cloud Config

Для клиента конфигурации облака у нас есть следующие требуемые зависимости. Нам потребуется клиент обнаружения позже для обнаружения службы. Пока что достаточно spring-cloud-starter-config.

pom.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<dependencies>
    <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.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
 
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Чтобы загрузить нашу конфигурацию весеннего облака с клиентским приложением, нам нужны следующие записи в bootstrap.yml . Следующая конфигурация вызовет файл конфигурации свойств для имени приложения spring-cloud-config-client и для локального профиля ctive, и наш сервер конфигурации облака работает на http: // localhost: 8888

1
2
3
spring.application.name=spring-cloud-config-client
spring.profiles.active=local
spring.cloud.config.uri=http://localhost:8888

Теперь давайте определим наш весенний загрузочный класс приложения.

SpringCloudConfigClientApplication.java

01
02
03
04
05
06
07
08
09
10
11
12
package com.devglan.springcloudconfigclient;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class SpringCloudConfigClientApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigClientApplication.class, args);
    }
}

Теперь давайте определим наш класс контроллера и используем аннотацию @Value для использования внешних свойств, используя конфигурацию Spring Cloud.

DemoController.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.devglan.springcloudconfigclient.controller;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class DemoController {
 
    @Value("${test.property}")
    private String testProperty;
 
    @Value("${test.local.property}")
    private String localTestProperty;
 
    @RequestMapping("/")
    public String test() {
        StringBuilder builder = new StringBuilder();
        builder.append("test property - ").append(testProperty).append(" ")
                .append("local property - ").append(localTestProperty);
        return builder.toString();
    }
}

В файле свойств мы определили свойства test.property и test.local.property которые вводятся здесь в контроллере. В файле свойств мы определили server.contextPath как spring-cloud-config-client и, следовательно, наше клиентское приложение будет доступно по адресу http: // localhost: 8080 / spring-cloud-config-client /

Интеграция сервисного обнаружения с Spring Cloud Config

В моей предыдущей статье мы создали приложение для обнаружения сервисов, используя spring-cloud-netflix-eureka . Мы будем использовать тот же сервер обнаружения, который работает на порте по умолчанию 8761. Чтобы интегрироваться с сервером обнаружения, давайте сначала отредактируем наш файл application.properties приложения-службы, чтобы зарегистрировать себя в качестве службы на сервере discvery. Следующие свойства будут зарегистрировать это приложение на сервере обнаружения в качестве имени приложения — spring-cloud-config-example

application.properties

1
2
spring.application.name=spring-cloud-config-example
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

Аннотируйте SpringCloudConfigExampleApplication.java с @EnableDiscoveryClient, чтобы это приложение регистрировалось в клиенте обнаружения.

Кроме того, нам нужно настроить то же самое в нашем клиентском приложении для обнаружения сервера конфигурации с помощью сервера обнаружения. Для этого аннотируйте SpringCloudConfigClientApplication.java с @EnableDiscoveryClient и в файле bootstrap.properties введите ниже записи для автоматического обнаружения службы конфигурации облака. По умолчанию Клиент облачного конфигурирования ищет приложение с именем configserver на сервере обнаружения для любого сервера облачного конфигурирования, но в нашем случае имя приложения сервера облачного конфигурирования — spring-cloud-config-example, и, следовательно, чтобы переопределить его в клиенте, мы использовали свойства spring.cloud.config.discovery.serviceId

bootstrap.properties

1
2
3
4
5
6
spring.application.name=spring-cloud-config-client
spring.profiles.active=local
#spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.discovery.enabled=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
spring.cloud.config.discovery.serviceId=spring-cloud-config-example

Теперь запустите сервер обнаружения, затем сервер облачной конфигурации, а затем клиентское приложение и нажмите http: // localhost: 8080 / spring-cloud-config-client /, и вы можете ожидать того же результата, что и выше.

Итак, вкратце, первый сервер обнаружения запускается, и это предоставляет конечную точку как http: // localhost: 8761 / eureka для регистрации службы. Теперь, когда сервер облачной конфигурации запускается, он регистрируется с помощью идентификатора службы spring-cloud-config-example и выставляет конечные точки как http://192.168.1.6:8888/. Теперь, когда клиент запущен, сначала он пытается разрешить свойства конфигурации. Для этого он использует сервер обнаружения для обнаружения сервера конфигурации с идентификатором службы — spring-cloud-config-example. После этого базовый URL-адрес разрешается, а затем он добавляет / averageapplication enj-ndomprofile broadcast.properties, то есть к этому URL-адресу, и извлекает свойства конфигурации. Окончательный URL становится — http: // localhost: 8888 / spring-cloud-config-client-local.properties

Обновление конфигурации облака во время выполнения

Это одна из замечательных возможностей весеннего облачного конфига, позволяющая обновлять свойства конфигурации во время выполнения без перезапуска приложения. Например, вы можете изменить уровни журналов. Чтобы обновить конфигурацию облака во время выполнения, вы можете изменить свойства конфигурации в git-проекте и отправить их в хранилище. Тогда мы можем использовать либо исполнительный механизм пружинной загрузки /refresh конечную точку /refresh либо /bus/refresh с /bus/refresh Cloud или с VCS + / монитор с монитором spring-cloud-config-monitor и spring-cloud-bus. Но это не обновит свойства, аннотированные @Value или @Bean, потому что эти свойства инициализируются во время запуска приложения. Чтобы обновить эти свойства, @RefreshScope предоставляет аннотацию @RefreshScope Мы реализуем это с примером из нашей следующей статьи — Свойство обновления конфигурации облака Spring во время выполнения

Шифрование и дешифрование конфиденциальной конфигурации

Это еще одна полезная функция, предоставляемая весенним облачным конфигом. Конфигурация, такая как пароль базы данных, имя пользователя, является конфиденциальной конфигурацией, и для этой пружины шифрования и дешифрования предоставляет множество функций, таких как зашифрованная конфигурация в REST или in-flight. Она также имеет функцию для шифрование и дешифрование с использованием симметричных и асимметричных ключей. В следующем уроке мы создадим пример приложения с примерами по этой теме. Ниже приведен пример приложения. Свойства с зашифрованной конфигурацией. Здесь представлена ​​полная конфигурация для шифрования и дешифрования конфиденциальной конфигурации.

application.properties

1
2
spring.datasource.username=root
spring.datasource.password={cipher}ABCFGVH75858GFHDRT

Вывод

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

См. Оригинальную статью здесь: Настройка Spring Cloud — Внешняя настройка приложения

Мнения, высказанные участниками Java Code Geeks, являются их собственными.