@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

person Deepak Akula    schedule 15.03.2018    source источник


Ответы (4)


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

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

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

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

person spencergibb    schedule 19.03.2018
comment
Спасибо, spencergibb. Даже указанная выше конечная точка раньше не работала. Я обновил версию spring-cloud-dependencies до Edgware.RELEASE и spring-boot-starter-parent до 1.5.10.RELEASE, и она начала работать. Думаю, проблема была в версиях. - person Deepak Akula; 20.03.2018
comment
Нет. Вам нужно установить management.endpoints.web.exposure.include = * (или список конечных точек для включения) - person spencergibb; 20.03.2018
comment
Спасибо, сработало. Я вернул версии к последним и добавил указанное выше свойство. Теперь я могу видеть последние значения, используя указанную выше конечную точку. - person Deepak Akula; 20.03.2018
comment
management.endpoints.web.exposure.include=refresh тоже подойдет. - person Shanu Gupta; 21.05.2018
comment
если у моего приложения 100 экземпляров в облаке, действительно ли мне нужно делать вызов GET для всех 100 / активатор / обновление? - person Kalpesh Soni; 19.12.2018
comment
@KalpeshSoni - вот для чего нужен весенний облачный автобус. - person spencergibb; 20.12.2018
comment
@spencergibb Итак, у нас мало bean-компонентов с referhscope и consul ConfigWatch. Каждый раз, когда мы меняем значение ключа, обновляются значения ключа, а также другие компоненты, которые нам не нужно обновлять. Есть ли способ ссылаться только на значение ключа, а не на другие компоненты? Спасибо - person s7vr; 18.03.2020
comment
@ user2683814 в настоящее время нет. Я бы удалил @RefreshScope и прослушал событие приложения EnvironmentChangeEvent, посмотрел, есть ли там нужные вам ключи, и обработал изменения вручную. - person spencergibb; 18.03.2020

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

person Rohit Nair    schedule 28.06.2018
comment
Где это задокументировано, помимо этого сообщения о выпуске / выпуске? - person acidnbass; 19.09.2018
comment
Документы с подробностями о @acidnbass находятся в документах. spring.io/spring-boot/docs/current/reference/html/ - person bostonjava; 01.02.2019

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

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

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

person Omar    schedule 23.01.2020

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

curl -H "Content-Type: application / json" -d {} http://localhost:port/actuator/refresh

вместо того:

curl -d {} http://localhost:port/refresh

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

person Roland Roos    schedule 26.11.2019