Overview
The Config Server provides centralized, externalized configuration management for all microservices in the Sistema de Ventas architecture. Built with Spring Cloud Config, it serves configuration files from a Git repository, enabling dynamic configuration updates without service restarts.Key Features
- Centralized Configuration: Single source of truth for all service configurations
- Git-Backed Storage: Version-controlled configuration files
- Environment Profiles: Support for development, staging, and production profiles
- Dynamic Refresh: Update configurations without restarting services
- Security: HTTP Basic authentication for configuration access
- Encryption: Support for encrypted property values
Architecture
Server Configuration
Application Settings
application.yml
Configuration Details:
- Port 7070: Default Config Server port
- Git URI: Remote repository containing configuration files
- searchPaths: Directory within repository containing config files
- default-label: Git branch to use (main)
- Security: HTTP Basic authentication credentials
Implementation
Main Application Class
JeaConfigServerApplication.java
@EnableConfigServer annotation activates the Config Server functionality.
Maven Dependencies
pom.xml
Spring Security is included to protect configuration endpoints with HTTP Basic authentication.
Configuration Repository Structure
The Git repository contains configuration files for each microservice:Client Configuration
Connecting to Config Server
Microservices connect using the following pattern:application.yml (Client)
Configuration Breakdown
Configuration Breakdown
- application.name: Must match the config file name in Git repository
- profiles.active: Environment profile (development, production, etc.)
- config.import: Config Server URL with credentials
- optional: Service starts even if Config Server is unavailable
Configuration Priority
Config Server follows this priority order (highest to lowest):{application}-{profile}.yml(e.g.,jea-gateway-service-production.yml){application}.yml(e.g.,jea-gateway-service.yml)application-{profile}.yml(e.g.,application-production.yml)application.yml
Configuration Examples
Gateway Service Configuration
config-data/jea-gateway-service.yml
Registry Service Configuration
config-data/jea-registry-service.yml
REST API Endpoints
The Config Server exposes RESTful endpoints for configuration access:Get Configuration
Endpoint Patterns
Parameters
- : Service name
- : Environment profile
- : Git branch (default: main)
Response Formats
- JSON (default)
- YAML
- Properties
Configuration Refresh
Dynamic Configuration Updates
Services can refresh configuration without restart using Spring Cloud Bus and the/actuator/refresh endpoint.
Enable Refresh in Clients
Client pom.xml
Client application.yml
Security
HTTP Basic Authentication
The Config Server uses Spring Security for authentication:Encrypting Sensitive Values
Config Server supports encryption for sensitive properties:Example with encryption
Running the Config Server
Prerequisites
- Java 17+ installed
- Maven 3.6+ installed
- Git repository with configuration files
- Network access to Git repository
Startup Commands
Verification
Git Repository Configuration
Public Repository
Private Repository with SSH
Private Repository with HTTPS
Environment-Specific Configuration
Multiple Profiles
Create profile-specific configuration files:Environment Variables
Use environment variables for deployment flexibility:jea-gateway-service.yml
Monitoring and Troubleshooting
Health Check
Common Issues
Configuration Not Found
Configuration Not Found
Error:
404 Not Found when accessing configurationCauses:- Application name mismatch
- Configuration file not in correct directory
- Git repository not accessible
- Verify
spring.application.namematches config file name - Check
searchPathsconfiguration - Verify Git repository URL and credentials
Authentication Failed
Authentication Failed
Error:
401 UnauthorizedCauses:- Incorrect username/password
- Missing credentials in client config
Git Connection Issues
Git Connection Issues
Error: Cannot connect to Git repositoryCauses:
- Network connectivity
- Invalid credentials
- Repository not found
- Test Git access:
git clone <repository-url> - Verify credentials and permissions
- Check firewall rules
Service Won't Start
Service Won't Start
Error: Client service fails to startCauses:
- Config Server not running
- Timeout connecting to Config Server
- Use
optional:configserver:prefix for optional config - Start Config Server before client services
- Increase timeout:
Best Practices
Version Control All Configurations
Store all configuration in Git for:
- Change tracking
- Rollback capability
- Team collaboration
- Audit trail
Implement Proper Security
- Use HTTPS in production
- Strong authentication credentials
- Network isolation
- Regular security audits
High Availability
For production deployments, run multiple Config Server instances:Client configuration
Performance Optimization
Enable Caching
Clone on Start
Shallow Clone
Client-Side Caching
Integration Examples
With Vault for Secrets
With Composite Backend
Related Documentation
- API Gateway - Gateway configuration management
- Service Registry - Registry configuration
- Deployment Guide - Deploying Config Server with Docker
- Security Best Practices - Securing configuration data