spring-cloud-config

Spring Cloud Config - Quick Reference

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "spring-cloud-config" with this command: npx skills add claude-dev-suite/claude-dev-suite/claude-dev-suite-claude-dev-suite-spring-cloud-config

Spring Cloud Config - Quick Reference

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: spring-cloud-config for comprehensive documentation.

Config Server Setup

Dependencies

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

Main Application

@SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }

application.yml (Server)

server: port: 8888

spring: application: name: config-server

cloud: config: server: git: uri: https://github.com/myorg/config-repo default-label: main search-paths: '{application}' clone-on-start: true timeout: 10 # For private repos username: ${GIT_USERNAME} password: ${GIT_TOKEN}

    # Multiple repositories
    # git:
    #   uri: https://github.com/myorg/default-config
    #   repos:
    #     user-service:
    #       pattern: user-*
    #       uri: https://github.com/myorg/user-config

Security

management: endpoints: web: exposure: include: health,refresh

Native Filesystem Backend

spring: profiles: active: native cloud: config: server: native: search-locations: - classpath:/config - file:///config-repo

Config Client Setup

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> </dependency>

application.yml (Client)

spring: application: name: user-service config: import: optional:configserver:http://localhost:8888

cloud: config: fail-fast: true retry: initial-interval: 1000 max-interval: 2000 max-attempts: 6 multiplier: 1.1 label: main # Git branch

For service discovery

spring:

config:

import: optional:configserver:

cloud:

config:

discovery:

enabled: true

service-id: config-server

Config Repository Structure

config-repo/ ├── application.yml # Shared by all apps ├── application-dev.yml # Shared dev profile ├── application-prod.yml # Shared prod profile ├── user-service.yml # user-service defaults ├── user-service-dev.yml # user-service dev ├── user-service-prod.yml # user-service prod ├── order-service.yml └── order-service-prod.yml

Example: user-service.yml

Base configuration

server: port: 8081

app: name: User Service feature-flags: new-dashboard: false beta-features: false

database: pool-size: 10 timeout: 5000

Example: user-service-prod.yml

Production overrides

server: port: 80

app: feature-flags: new-dashboard: true

database: pool-size: 50 timeout: 3000

Accessing Configuration

REST Endpoints

Get configuration

GET http://localhost:8888/{application}/{profile} GET http://localhost:8888/{application}/{profile}/{label}

Examples

GET http://localhost:8888/user-service/default GET http://localhost:8888/user-service/prod GET http://localhost:8888/user-service/prod/main

Get specific file

GET http://localhost:8888/{application}/{profile}/{label}/{filename}

Dynamic Refresh

Enable Refresh

management: endpoints: web: exposure: include: refresh,health,info

@RefreshScope

@RestController @RefreshScope public class ConfigController {

@Value("${app.feature-flags.new-dashboard}")
private boolean newDashboard;

@Value("${app.name}")
private String appName;

@GetMapping("/config")
public Map&#x3C;String, Object> getConfig() {
    return Map.of(
        "appName", appName,
        "newDashboard", newDashboard
    );
}

}

@Configuration @RefreshScope @ConfigurationProperties(prefix = "app") public class AppConfig { private String name; private Map<String, Boolean> featureFlags; // getters, setters }

Trigger Refresh

Single service

POST http://localhost:8081/actuator/refresh

Response: changed properties

["app.feature-flags.new-dashboard", "app.name"]

Spring Cloud Bus (Broadcast Refresh)

Dependencies

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <!-- or Kafka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-kafka</artifactId> </dependency>

Configuration

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

management: endpoints: web: exposure: include: busrefresh

Broadcast Refresh

Refresh all instances

POST http://localhost:8888/actuator/busrefresh

Refresh specific service

POST http://localhost:8888/actuator/busrefresh/user-service:**

Encryption/Decryption

Setup

Config Server

encrypt: key: ${ENCRYPT_KEY} # Symmetric key

Or asymmetric

encrypt: key-store: location: classpath:/server.jks password: ${KEYSTORE_PASSWORD} alias: configkey

Encrypt Values

Encrypt a value

POST http://localhost:8888/encrypt -d "mysecret"

Returns: AQA...encrypted...

Decrypt

POST http://localhost:8888/decrypt -d "AQA...encrypted..."

Use in Config

In config repo

spring: datasource: password: '{cipher}AQA...encrypted...'

database: api-key: '{cipher}AQB...encrypted...'

Health Check

@Configuration public class ConfigHealthConfig {

@Bean
public HealthIndicator configServerHealthIndicator(ConfigClientProperties props) {
    return () -> {
        try {
            // Check config server connectivity
            return Health.up()
                .withDetail("configServer", props.getUri())
                .build();
        } catch (Exception e) {
            return Health.down()
                .withException(e)
                .build();
        }
    };
}

}

Vault Backend

spring: cloud: config: server: vault: host: localhost port: 8200 scheme: https backend: secret default-key: application profile-separator: / kv-version: 2 authentication: TOKEN token: ${VAULT_TOKEN}

Best Practices

Do Don't

Use Git for version control Store configs locally only

Encrypt sensitive values Store passwords in plain text

Use profile-specific configs Mix environments in one file

Enable fail-fast in production Ignore config server failures

Use @RefreshScope sparingly Refresh-scope everything

Production Checklist

  • Config server highly available

  • Git repo secured

  • Sensitive values encrypted

  • Retry configuration set

  • fail-fast enabled

  • Health checks configured

  • Spring Cloud Bus for broadcast

  • Actuator endpoints secured

  • Label (branch) strategy defined

  • Webhook for auto-refresh

When NOT to Use This Skill

  • Single application - Use standard Spring Boot properties

  • Kubernetes - Use ConfigMaps, Secrets

  • Secrets only - Use Vault, AWS Secrets Manager

  • Simple setup - Overhead may not be justified

Anti-Patterns

Anti-Pattern Problem Solution

Secrets in Git Security vulnerability Use encrypt or Vault

No fail-fast App starts with wrong config Enable spring.cloud.config.fail-fast

Missing @RefreshScope Config changes need restart Add annotation to beans

Polling config server High load Use webhook-based refresh

No backup config Config server down = app down Configure fallback

Quick Troubleshooting

Problem Diagnostic Fix

Config not loading Check config server logs Verify profile, label

Refresh not working Check @RefreshScope Add annotation, POST /actuator/refresh

Wrong environment Check spring.profiles.active Set correct profile

Git auth failing Check credentials Configure correct auth

Encryption not working Check encrypt.key Set encryption key

Reference Documentation

  • Spring Cloud Config Reference

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

cron-scheduling

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

token-optimization

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

webrtc

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

react-19

No summary provided by upstream source.

Repository SourceNeeds Review