Невозможно заставить /refresh работать с spring-cloud-client, когда server.port и management.port разные

Ниже приведены application.properties для приложения Spring-Boot.

spring.application.name=test-service
server.port=8080

management.port=8081
management.context-path=/admin

spring.cloud.config.uri=http://localhost:8888
endpoints.refresh.enabled=true
endpoints.restart.enabled=true

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

Я изменяю свойства на сервере конфигурации и запускаю обновление приложения, используя

curl -X POST http://localhost:8081/admin/refresh

API печатает имя свойства, которое было изменено.

Когда я получаю доступ к свойству, я все еще вижу старое значение

curl -X GET http://localhost:8081/admin/env/{property_name}

Я запускаю перезагрузку, и он подбирает новое значение свойства

curl -X POST http://localhost:8081/admin/restart 

См. то же поведение, когда я пытаюсь изменить значение свойства, используя

curl -X POST  http://localhost:8081/admin/env -d property1=123

Когда я пытаюсь получить значение свойства, я все еще вижу старое значение

curl -X GET http://localhost:8081/admin/env/property1

Когда я меняю management.port на 8080 (то же, что и server.port), все работает как положено.

Ожидается ли такое поведение? Мне кажется, что он изменяет 2 разные среды: одну для сервера, работающего на 8080, а другую — на 8081.


person swamig    schedule 18.09.2016    source источник


Ответы (2)


Не могли бы вы поделиться своим файлом pom.xml и основным файлом (записью) приложения. Независимо от того, мы можем использовать другой порт. Если вы можете получить измененные свойства в вызове «/refresh», это должно работать и в вашем приложении. Вы уверены, что используете @RefreshScope в своем bean-компоненте?

Примечание. @RefreshScope не будет работать с аннотацией @Configuration. Дополнительные сведения см. в документации https://cloud.spring.io/spring-cloud-config/spring-cloud-config.html.

person VelNaga    schedule 26.09.2016

Похоже, проблема с spring-boot.

EnvironmentEndpoint и EnvironmentMVCEndpoint внедряются с двумя разными средами, когда server.port и management.port различны.

Среда приложения имеет обновленное значение, но когда я получаю значение определенного свойства EnviromentMVCEndpoint, оно не отражает правильное значение в своей среде.

@GetMapping(value = "/{name:.*}", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@HypermediaDisabled
public Object value(@PathVariable String name) {
    if (!getDelegate().isEnabled()) {
        // Shouldn't happen - MVC endpoint shouldn't be registered when delegate's
        // disabled
        return getDisabledResponse();
    }
    return new NamePatternEnvironmentFilter(this.environment).getResults(name);
}

@Override
public void setEnvironment(Environment environment) {
    this.environment = environment;
}
person swamig    schedule 26.09.2016