В этой серии руководств по конфигурированию весенних облаков мы будем обсуждать обновление конфигурации свойств во время выполнения. Мы будем делать это с использованием конечной точки исполнительного механизма /refresh весенней загрузки. Также мы рассмотрим обновление свойств @RefreshScope с @RefreshScope аннотации @RefreshScope .
В моем последнем уроке по настройке Spring Cloud мы настроили службу облачной конфигурации с сервером обнаружения и клиентом обнаружения и успешно создали пример для чтения свойств конфигурации приложения в распределенной среде с хранилищем с поддержкой GIT. Здесь мы перейдем к демонстрации функциональность обновления конфигурации свойств в весеннем облачном конфиге во время выполнения.
В этой статье мы сосредоточимся только на обновлении свойств конфигурации. Таким образом, мы не будем использовать конфигурацию, связанную с сервером обнаружения. У нас будет сервер конфигурации для загрузки свойств из хранилища GIT и клиент конфигурации с проектом actator.
Различные способы обновить свойства
Простой способ обновить свойство конфигурации — это использовать /refresh конечную точку, предоставляемую приводом с пружинной загрузкой. Но это ручной процесс, который нужно запускать для всех экземпляров. Другой способ — с /bus/refresh с spring-cloud-bus и в этом случае все экземпляры подписываются на событие, и всякий раз, когда это событие запускается, все свойства конфигурации будут автоматически обновляться посредством широковещательной передачи по шине Spring Cloud. И третий способ обновить эти свойства — это подключиться к VCS. В этой статье мы будем иметь дело с конечной точкой обновления привода с пружинной загрузкой.
Внедрение сервера Spring Cloud Config
У нас уже есть готовая настройка для этой реализации в моей предыдущей статье. Здесь давайте кратко обсудим это. У нас есть следующие application.properties, определенные в конфигурационном сервере и основном приложении весенней загрузки. Он предоставляет конечную точку REST как http: // localhost: 8888 для клиента, чтобы получить свойства конфигурации.
application.properties
|
1
2
|
server.port=8888spring.cloud.config.server.git.uri=https://github.com/only2dhir/config-repo.git |
SpringCloudConfigExampleApplication.java
|
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@EnableConfigServerpublic class SpringCloudConfigExampleApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudConfigExampleApplication.class, args); }} |
У нас есть свойства внешней конфигурации, определенные на https://github.com/only2dhir/config-repo.git. Здесь у нас есть свойства, определенные для локальных и глобальных свойств активного профиля.
Внедрение клиента Spring Cloud Config
Для клиента у нас определены следующие bootstrap.properties Это тот же файл, который мы определили в нашем предыдущем приложении здесь
bootstrap.properties
|
1
2
3
|
spring.application.name=spring-cloud-config-clientspring.profiles.active=local#spring.cloud.config.uri=http://localhost:8888 |
Обновление свойств конфигурации с помощью / refresh Endpoint
Конечная точка /refresh обновляет только те свойства, которые @ConfigurationProperties означает, что она не обновляет те свойства, которые инициализируются во время инициализации приложения. Например, у нас определен следующий класс конфигурации, который читает свойство с префиксом random
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
package com.devglan.springcloudconfigclient;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component@ConfigurationProperties(prefix="random")public class PropertyConfiguration { private String property; public String getProperty() { return property; } public void setProperty(String property) { this.property = property; }} |
У нас есть следующий класс контроллера, который использует свойство с префиксом random и также читает свойство с аннотацией @Value
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
@RestControllerpublic class DemoController { @Value("${test.property}") private String testProperty; @Value("${test.local.property}") private String localTestProperty; @Autowired private PropertyConfiguration propertyConfiguration; @RequestMapping("/") public String test() { StringBuilder builder = new StringBuilder(); builder.append("global property - ").append(testProperty).append(" || ") .append("local property - ").append(localTestProperty).append(" || ") .append("property configuration value - ").append(propertyConfiguration.getProperty()); return builder.toString(); }} |
Для конечной точки выводом будет http: // localhost: 8080 / spring-cloud-config-client / follow.
Теперь давайте изменим свойства конфигурации, определенные в spring-cloud-config-client-local.properties как spring-cloud-config-client-local.properties ниже.
|
1
2
|
test.local.property=test local property changedrandom.property=random property changed |
Теперь мы будем вызывать POST-метод http: // localhost: 8080 / spring-cloud-config-client / refresh, чтобы обновить свойство. Ниже будет ответ с обновленными свойствами.
Теперь, если мы нажмем http: // localhost: 8080 / spring-cloud-config-client /, мы увидим, что свойство, поступающее из класса, аннотированного @ConfigurationProperties, было обновлено, но свойство, аннотированное @Value, не было обновлено, поскольку оно инициализируется во время запуска приложения


| См. Оригинальную статью здесь: Обновить конфигурацию свойства во время выполнения в Spring Cloud Config.
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |

