@RefreshScope и / refresh не работают

Я попытался реализовать внешние конфигурации Spring с помощью Config Server. Он работает нормально в первый раз при запуске приложения, но никакие изменения в файле свойств не отражаются. Я пытался использовать / обновить конечную точку, чтобы обновлять свои свойства на лету, но похоже, что это не работает. Любая помощь по этому поводу будет очень полезна.

Я попытался отправить сообщение на localhost: 8080 / refresh, но получил ответ об ошибке 404.

Ниже приведен код моего класса приложения

   @SpringBootApplication
public class Config1Application {

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

@RestController
@RefreshScope
class MessageRestController {

    @Value("${message:Hello default}")
    private String message;

    @RequestMapping("/message")
    String getMessage() {
        return this.message;
    }
}

и файл POM

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.M8</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

и bootstrap.properties

spring.application.name=xxx
spring.cloud.config.uri=https://xxxxxx.com
management.security.enabled=false
endpoints.actuator.enabled=true
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
15 184
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Конечная точка теперь /actuator/refresh для Spring 2 и выше.

Из комментариев:

  • Вам необходимо установить management.endpoints.web.exposure.include=refresh в bootstrap.properties/bootstrap.yml.

Примечание: Если вы новичок в Spring-Cloud и не совсем уверены в том, какие ключевые слова могут быть включены в web.exposure, вы можете установить его на * (management.endpoints.web.exposure.include=*), чтобы все они были открыты, и вы могли узнать конечные точки и их ограничения позже.

Спасибо, spencergibb. Даже указанная выше конечная точка раньше не работала. Я обновил версию spring-cloud-dependencies до Edgware.RELEASE и spring-boot-starter-parent до 1.5.10.RELEASE, и она начала работать. Думаю, проблема была в версиях.

Deepak Akula 20.03.2018 00:59

Нет. Вам нужно установить management.endpoints.web.exposure.include = * (или список конечных точек для включения)

spencergibb 20.03.2018 01:15

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

Deepak Akula 20.03.2018 02:18
management.endpoints.web.exposure.include=refresh тоже подойдет.
Shanu Gupta 21.05.2018 05:05

Если у моего приложения 100 экземпляров в облаке, действительно ли мне нужно делать вызов GET для всех 100 / активатор / обновление?

Kalpesh Soni 19.12.2018 20:03

@KalpeshSoni - вот для чего нужен весенний облачный автобус.

spencergibb 20.12.2018 00:36

@spencergibb Итак, у нас мало bean-компонентов с referhscope и consul ConfigWatch. Каждый раз, когда мы меняем значение ключа, обновляются значения ключа, а также другие компоненты, которые нам не нужно обновлять. Есть ли способ ссылаться только на значение ключа, а не на другие компоненты? Спасибо

s7vr 18.03.2020 16:32

@ user2683814 в настоящее время нет. Я бы удалил @RefreshScope и прослушал событие приложения EnvironmentChangeEvent, посмотрел, есть ли там нужные вам ключи, и обработал бы изменения вручную.

spencergibb 18.03.2020 21:11

Это сработало для меня после добавления свойства «management.endpoints.web.exposure.include = *» в bootstrap.properties и изменения URL-адреса на / actator / refresh для весенней версии выше 2.0.0 Для весенней версии 1.0.5 URL-адрес / refresh

Где это задокументировано, кроме этого сообщения о выпуске / выпуске?

acidnbass 19.09.2018 02:55

Документы с подробностями о @acidnbass находятся по адресу docs.spring.io/spring-boot/docs/current/reference/html/…

bostonjava 01.02.2019 19:41

Если у вас есть проблемы с принятием формы, закодированной в SPRING 2.0>, используйте:

curl -H "Content-Type: application / json" -d {} http: // localhost: порт / привод / обновление

вместо:

curl -d {} http: // localhost: порт / обновление

который был принят ВЕСНОЙ 1. *

Для файлов YAML значение свойства необходимо заключить в двойные кавычки:

# Spring Boot Actuator
management:
  endpoints:
    web:
      exposure:
        include: "*"

Примечание. Убедитесь, что вы используете правильное ключевое слово конечные точки (с 's') для этого свойства, если оно существует для другого свойства без 's': "management.endpoint.health ....".

Другие вопросы по теме