Spring Cloud Config Server: array vuoto per chiavi aggiornate
Ho un server di configurazione cloud primaverile come in questo repository e un client in questo repository che segue è il mio file POM
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ali.wassouf.spring.cloud.client</groupId>
<artifactId>cloud-config-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloud-config-app</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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-config-monitor</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>
</project>
application.yml del server di configurazione
server:
port: 8081
spring:
application:
name: cloud-config-server
cloud:
config:
server:
monitor:
github:
enabled: true
gitee:
enabled: true
git:
password: ${PASSWORD}
username: ${USERNAME}
uri: https://github.com/Ali-Wassouf/springcloudconfigrepo
search-paths: '{application}'
Il repository di configurazione servito da questo server ha la seguente struttura
.
+-- serviceA
| +-- application-dev.properties
| +-- application-prod.properties
+-- serviceB
| +-- application-dev.properties
| +-- application-prod.properties
Ho un webhook configurato per il repository di configurazione. Ho anche un'immagine rabbitMQ in esecuzione localmente.
Quando invio le mie modifiche al repository di configurazione, ottengo queste righe sulla console
o.s.c.c.monitor.PropertyPathEndpoint : Refresh for: *:prod
s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2c943d8f: startup date [Mon Nov 23 18:55:19 CET 2020]; root of context hierarchy
o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.config.client.ConfigServiceBootstrapConfiguration$RetryConfiguration]: java.lang.IllegalStateException: Could not obtain annotation attribute value for public abstract java.lang.Class[] org.springframework.boot.autoconfigure.condition.ConditionalOnClass.value()
trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$aacb9e64] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
o.s.boot.SpringApplication : No active profile set, falling back to default profiles: default
s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@7d2d9a8f: startup date [Mon Nov 23 18:55:20 CET 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2c943d8f
o.s.boot.SpringApplication : Started application in 1.515 seconds (JVM running for 31.102)
s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@7d2d9a8f: startup date [Mon Nov 23 18:55:20 CET 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2c943d8f
s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2c943d8f: startup date [Mon Nov 23 18:55:19 CET 2020]; root of context hierarchy
o.s.cloud.bus.event.RefreshListener : Received remote refresh request. Keys refreshed []
L'array di chiavi aggiornate è vuoto. Ho provato a passare a una versione precedente di Spring Boot / Cloud, nonché a una versione più recente, ma non ha funzionato.
Ho visto domande simili al mio caso ma nessuna di esse ha avuto risposta.
Risposte
Nella tua application.ymlhai definito la spring.cloud.config.server.git.search-pathschiave di configurazione. Tuttavia, guardando questo documento dalla documentazione ufficiale della primavera, la chiave sembra avrebbe dovuto essere searchPaths(snakeCase, no dash). Quindi, penso che il tuo application.ymldovrebbe assomigliare a questo:
server:
port: 8081
spring:
application:
name: cloud-config-server
cloud:
config:
server:
monitor:
github:
enabled: true
gitee:
enabled: true
git:
password: ${PASSWORD} username: ${USERNAME}
uri: https://github.com/Ali-Wassouf/springcloudconfigrepo
searchPaths: '{application}'
Il problema era nel client, manca la configurazione del cloud primaverile e la gestione delle dipendenze per il cloud primaverile che aggiunge questa dipendenza al codice del client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
e aggiungendo anche questa gestione delle dipendenze
<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>
Risolto il problema.