Automatic refresh of Config Clients not working in Spring Boot 2

I am trying to migrate a simple example code with Spring Cloud Config Server and RabbitMQ as Spring Cloud Bus (based on Spring Boot 1.5.22.RELEASE and Spring Cloud Brixton.SR7) to Spring Boot 2.2.6.RELEASE and Spring Cloud Hoxton.SR3. The example consists of a Config Server, a Config Client, GitLab as SCM and RabbitMQ(3.8 - Эрланг 22.1.5). Код компилируется, запускается, запускается push-перехватчик, который также можно увидеть в журнале сервера и клиента.

Проблема в том, что свойство, обновленное в Git, не обновляется в клиенте. На базеSpring Boot 1.5.22.RELEASE а также Spring Cloud Brixton.SR7работает надежно. Но если я сделаюcurl -X POST http://localhost:8889/actuator/bus-refresh вручную, свойство будет обновлено.

В чем может быть проблема или какое свойство я забыл настроить?

Вот моя конфигурация / код:

GitLab (запущенный как контейнер Docker) Push WebHook: http://user:password@localhost:8889/monitor

RabbitMQ (запущенный как контейнер Docker) без конкретной конфигурации

pom.xml Корневой модуль сервера и клиента конфигурации:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>spring-config-server</module>
        <module>spring-config-client</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>com.myorg</groupId>
    <artifactId>spring-config-mgmt</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

    <properties>
        <spring-cloud-dependencies.version>Hoxton.SR3</spring-cloud-dependencies.version>
    </properties>

</project>

pom.xml сервера конфигурации:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-config-mgmt</artifactId>
        <groupId>com.myorg</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-config-server</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-monitor</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
    </dependencies>

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


</project>

pom.xml клиента конфигурации:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-config-mgmt</artifactId>
        <groupId>com.myorg</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-config-client</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
    </dependencies>

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


</project>

application.yml сервера конфигурации:

server:
  port: 8889

spring:
  cloud:
    config:
      server:
        git:
          uri: git@localhost:root/springcloudconfig.git
          clone-on-start: true

  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

logging:
  level:
    org.springframework: DEBUG

application.yml клиента конфигурации:

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

logging:
  level:
    org.springframework: TRACE

bootstrap.properties клиента конфигурации:

spring.application.name=config-client
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8889
spring.cloud.config.fail-fast=true
management.security.enabled=false

Сервер конфигурации:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class Application {

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

Клиент конфигурации:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.scheduling.annotation.Scheduled;

@SpringBootApplication
@RefreshScope
@EnableScheduling
public class Application {

    @Value("${myProperty}")
    private String myProperty;

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

    @Scheduled(fixedDelay =1000)
    public void printProperty() {
        System.out.println("Value of property \"myProperty\": " + myProperty);
    }
}

Спасибо заранее

2 ответа

Решение

Установка свойства spring.cloud.bus.id в bootstrap.propertiesисправлена ​​проблема:https://github.com/spring-cloud/spring-cloud-bus/issues/124

Не очень красиво, но работает.

Во-первых, вы должны установить имя вашего сервера конфигурации (пример: spring.application.name= configServer) и в наборе серверов конфигурации (пример: spring.cloud.bus.id = configServer:9000), конечно, порт должен быть портом вашего сервера конфигурации.

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