Configuration
Configuration centralisée avec Spring Cloud Config
10-15 min
Configuration Centralisée avec Spring Cloud Config
La configuration centralisée est un aspect crucial des architectures microservices. Elle permet de gérer la configuration de tous les services à partir d’un point central, facilitant ainsi la maintenance et la cohérence.
1. Configuration du Serveur Config
1.1 Création du Projet Config Server
curl https://start.spring.io/starter.tgz \
-d dependencies=cloud-config-server \
-d groupId=com.example \
-d artifactId=config-server \
-d name=config-server \
-d description=Config%20Server%20for%20Microservices \
-d packageName=com.example.config \
-d packaging=jar \
-d javaVersion=17 \
-d type=maven-project \
| tar -xzvf -
1.2 Configuration du Serveur
# application.yml
server:
port: 8888
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo
default-label: main
search-paths:
- config/*
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
1.3 Activation du Serveur Config
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
2. Configuration des Clients
2.1 Ajout des Dépendances
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2.2 Configuration du Client
# bootstrap.yml
spring:
application:
name: product-service
cloud:
config:
uri: http://localhost:8888
fail-fast: true
retry:
max-attempts: 6
initial-interval: 1000
multiplier: 1.1
max-interval: 2000
3. Organisation des Fichiers de Configuration
3.1 Structure du Repository Git
config-repo/
├── config/
│ ├── product-service.yml
│ ├── order-service.yml
│ └── application.yml
3.2 Exemple de Configuration
# config/product-service.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/productdb
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
server:
port: 8080
logging:
level:
root: INFO
com.example: DEBUG
4. Fonctionnalités Avancées
4.1 Encryption/Decryption
# application.yml
encrypt:
key-store:
location: classpath:keystore.jks
secret: your-secret
4.2 Refresh Scope
@RefreshScope
@RestController
@RequestMapping("/api/products")
public class ProductController {
@Value("${feature.toggle.new-ui}")
private boolean newUiEnabled;
// ...
}
4.3 Profiles
# config/product-service-dev.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/productdb_dev
# config/product-service-prod.yml
spring:
datasource:
url: jdbc:postgresql://prod-db:5432/productdb_prod
5. Monitoring et Santé
5.1 Endpoints de Santé
management:
endpoints:
web:
exposure:
include: health,info,configprops
endpoint:
health:
show-details: always
5.2 Monitoring avec Actuator
@Configuration
public class ConfigServerHealthIndicator implements HealthIndicator {
@Override
public Health health() {
try {
// Vérification de la connexion au repository Git
return Health.up()
.withDetail("git-repo", "connected")
.build();
} catch (Exception e) {
return Health.down()
.withException(e)
.build();
}
}
}
Conclusion
La configuration centralisée avec Spring Cloud Config offre plusieurs avantages :
- Gestion centralisée des configurations
- Support des différents environnements
- Sécurité avec le chiffrement des valeurs sensibles
- Mise à jour dynamique des configurations
- Intégration avec Eureka pour la découverte de services
Dans le prochain tutoriel, nous verrons comment mettre en place une API Gateway avec Spring Cloud Gateway pour gérer le routage et la sécurité de nos microservices.
Commentaires
Les commentaires sont alimentés par GitHub Discussions
Connectez-vous avec GitHub pour participer à la discussion