Я попытался реализовать внешние конфигурации 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





Конечная точка теперь /actuator/refresh для Spring 2 и выше.
Из комментариев:
management.endpoints.web.exposure.include=refresh в bootstrap.properties/bootstrap.yml.Примечание: Если вы новичок в Spring-Cloud и не совсем уверены в том, какие ключевые слова могут быть включены в web.exposure, вы можете установить его на * (management.endpoints.web.exposure.include=*), чтобы все они были открыты, и вы могли узнать конечные точки и их ограничения позже.
Нет. Вам нужно установить management.endpoints.web.exposure.include = * (или список конечных точек для включения)
Спасибо, сработало. Я вернул версии к последним и добавил указанное выше свойство. Теперь я могу видеть последние значения, используя указанную выше конечную точку.
management.endpoints.web.exposure.include=refresh тоже подойдет.
Если у моего приложения 100 экземпляров в облаке, действительно ли мне нужно делать вызов GET для всех 100 / активатор / обновление?
@KalpeshSoni - вот для чего нужен весенний облачный автобус.
@spencergibb Итак, у нас мало bean-компонентов с referhscope и consul ConfigWatch. Каждый раз, когда мы меняем значение ключа, обновляются значения ключа, а также другие компоненты, которые нам не нужно обновлять. Есть ли способ ссылаться только на значение ключа, а не на другие компоненты? Спасибо
@ user2683814 в настоящее время нет. Я бы удалил @RefreshScope и прослушал событие приложения EnvironmentChangeEvent, посмотрел, есть ли там нужные вам ключи, и обработал бы изменения вручную.
Это сработало для меня после добавления свойства «management.endpoints.web.exposure.include = *» в bootstrap.properties и изменения URL-адреса на / actator / refresh для весенней версии выше 2.0.0 Для весенней версии 1.0.5 URL-адрес / refresh
Где это задокументировано, кроме этого сообщения о выпуске / выпуске?
Документы с подробностями о @acidnbass находятся по адресу docs.spring.io/spring-boot/docs/current/reference/html/…
Если у вас есть проблемы с принятием формы, закодированной в 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 ....".
Спасибо, spencergibb. Даже указанная выше конечная точка раньше не работала. Я обновил версию spring-cloud-dependencies до Edgware.RELEASE и spring-boot-starter-parent до 1.5.10.RELEASE, и она начала работать. Думаю, проблема была в версиях.