0%
Configuration Centralisée

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

Lien copié !