В этой серии руководств по конфигурированию весенних облаков мы будем обсуждать обновление конфигурации свойств во время выполнения. Мы будем делать это с использованием конечной точки исполнительного механизма /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= 8888 spring.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 @EnableConfigServer public 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-client spring.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
|
@RestController public 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 changed random.property=random property changed |
Теперь мы будем вызывать POST-метод http: // localhost: 8080 / spring-cloud-config-client / refresh, чтобы обновить свойство. Ниже будет ответ с обновленными свойствами.
Теперь, если мы нажмем http: // localhost: 8080 / spring-cloud-config-client /, мы увидим, что свойство, поступающее из класса, аннотированного @ConfigurationProperties, было обновлено, но свойство, аннотированное @Value, не было обновлено, поскольку оно инициализируется во время запуска приложения
Чтобы обновить свойство, аннотированное @Value, нам нужно аннотировать класс с помощью @RefreshScope. Следовательно, здесь мы будем аннотировать класс контроллера с помощью @RefreshScope и перезапускать клиентское приложение. После перезапуска мы внесем изменения в файл свойств и отправим изменения в git. На этот раз мы добавили значение свойства в строку дважды, и снова мы снова вызываем конечную точку обновления. Теперь, если мы нажмем на ссылку http: // localhost: 8080 / spring-cloud-config-client /, то обнаружим, что оба свойства конфигурации, аннотированные @Value и @ConfigurationProperties, были обновлены.
См. Оригинальную статью здесь: Обновить конфигурацию свойства во время выполнения в Spring Cloud Config.
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |