Working with Spring Cloud Configuration
1. Setting Up Spring Cloud Config Server
Example: Config server dependency
< dependency >
< groupId >org.springframework.cloud</ groupId >
< artifactId >spring-cloud-config-server</ artifactId >
</ dependency >
Example: Enable config server
@ SpringBootApplication
@ EnableConfigServer
public class ConfigServerApp { public static void main ( String [] a ) { SpringApplication. run (ConfigServerApp.class, a); } }
2. Configuring Config Server with Git Backend
server.port : 8888
spring :
cloud :
config :
server :
git :
uri : https://github.com/example/config-repo
search-paths : '{application}'
default-label : main
username : ${GIT_USER}
password : ${GIT_TOKEN}
3. Using Config Client in Applications
Example: Config client with fail-fast and retry
# application.yml (client)
spring :
application.name : orders
config.import : "optional:configserver:http://config-server:8888"
cloud :
config :
profile : ${spring.profiles.active:default}
fail-fast : true
retry : { initial-interval : 1000 , max-attempts : 6 }
4. Managing Environment-Specific Configurations
Repo File
Resolved For
orders.yml
orders (default profile)
orders-dev.yml
orders + dev
orders-prod.yml
orders + prod
application.yml
Shared by all apps
5. Refreshing Configuration (@RefreshScope)
Example: Refresh-scoped bean on POST /actuator/refresh
@ RestController
@ RefreshScope
public class FeatureController {
@ Value ( "${feature.banner:hello}" ) String banner;
@ GetMapping ( "/banner" ) public String banner () { return banner; }
}
// POST /actuator/refresh to re-read external config
6. Encrypting Properties in Config Server
Example: Encrypt and store secrets with config server
# server requires JCE + encrypt.key (or asymmetric keystore)
curl http://config-server:8888/encrypt -d 'mySecret'
# → AQAB... place in repo as: db.password: '{cipher}AQAB...'
7. Using Config Server with Vault Backend
Example: Vault-backed config server
spring :
profiles.active : vault
cloud :
config :
server :
vault :
host : vault.local
port : 8200
scheme : https
backend : secret
default-key : application
8. Implementing Config Server Security
Example: Secure config server with basic auth
# Server
spring.security.user.name : configadmin
spring.security.user.password : ${CONFIG_ADMIN_PASSWORD}
# Client
spring.cloud.config.username : configadmin
spring.cloud.config.password : ${CONFIG_ADMIN_PASSWORD}
9. Using Bus Refresh for Dynamic Updates
Example: Spring Cloud Bus AMQP dependency
< dependency >
< groupId >org.springframework.cloud</ groupId >
< artifactId >spring-cloud-starter-bus-amqp</ artifactId >
</ dependency >
Note: POST /actuator/busrefresh on any node broadcasts a refresh
to all clients via RabbitMQ/Kafka.
10. Testing Configuration Management
Tool
Use
@SpringBootTest(properties=...)
Override at test time
spring.cloud.config.enabled=false
Disable client in tests
WireMock for Config Server
Stub responses
Local file backend
spring.profiles.active=native + search-locations