Spring Boot Config Server

February 22, 20254 min read

Spring Boot Config Server

Spring Boot Config Server enables centralized configuration management for distributed applications, allowing dynamic configuration updates without requiring service restarts. This guide covers how to set up and use Spring Boot Config Server efficiently.


🌟 Why Use Config Server?

  • Centralized Configuration: Manage application settings in a single place.
  • Dynamic Updates: Update configurations without restarting services.
  • Environment Profiles: Support different configurations for dev, test, and production environments.
  • Security & Access Control: Store sensitive configurations securely.
  • Integration with Git: Keep configuration versions managed and trackable.

🌟 Prerequisites

Ensure you have the following:

  • Java Development Kit (JDK) 17+
  • 📦 Maven or Gradle installed
  • 📁 Git Repository (for storing configurations)

🛠 Step 1: Add Dependencies

Add the necessary dependencies for Spring Cloud Config Server.

Maven Configuration:

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

Gradle Configuration:

implementation 'org.springframework.cloud:spring-cloud-config-server'

📖 Step 2: Create the Config Server Application

package com.example.configserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; @SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
package com.example.configserver import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.cloud.config.server.EnableConfigServer @SpringBootApplication @EnableConfigServer class ConfigServerApplication fun main(args: Array<String>) { runApplication<ConfigServerApplication>(*args) }

🛠 Step 3: Configure the Config Server

Create an application.yml file to specify the Git repository for storing configurations.

server: port: 8888 spring: cloud: config: server: git: uri: https://github.com/example/config-repo default-label: main

Note: Replace https://github.com/example/config-repo with your actual Git repository.


📂 Step 4: Create a Configuration Repository

In your Git repository (e.g., config-repo), create an application.yml file with the following content:

config.key: 'Hello from Config Server!'

Commit and push the file to the repository:

git add application.yml git commit -m "Add config properties" git push origin main

▶️ Running the Config Server

Start the Config Server application:

./mvnw spring-boot:run

or using Gradle:

gradle bootRun

Verify it is running by accessing:

curl -X GET http://localhost:8888/application/default

Expected Output:

{ "name": "application", "profiles": ["default"], "propertySources": [ { "name": "https://github.com/example/config-repo/application.yml", "source": { "config.key": "Hello from Config Server!" } } ] }

📌 Step 5: Configure a Client Application

Add Dependencies

Maven:

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

Gradle:

implementation 'org.springframework.cloud:spring-cloud-starter-config'

Client Application Configuration

In the client's bootstrap.yml, add the following:

spring: application: name: config-client cloud: config: uri: http://localhost:8888

Client Application Code

package com.example.configclient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.beans.factory.annotation.Value; @SpringBootApplication @RestController @RequestMapping("/config") public class ConfigClientApplication { @Value("${config.key:not found}") private String configValue; @GetMapping public String getConfigValue() { return "Config Value: " + configValue; } public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } }
package com.example.configclient import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController import org.springframework.beans.factory.annotation.Value @SpringBootApplication @RestController @RequestMapping("/config") class ConfigClientApplication { @Value("\${config.key:not found}") lateinit var configValue: String @GetMapping fun getConfigValue(): String { return "Config Value: \$configValue" } } fun main(args: Array<String>) { runApplication<ConfigClientApplication>(*args) }

🏃 Running the Client Application

Run the Config Client application:

./mvnw spring-boot:run

or using Gradle:

gradle bootRun

Retrieve the configuration from Config Server:

curl -X GET http://localhost:8080/config

Expected Output:

Config Value: Hello from Config Server!

Spring Boot Config Server simplifies configuration management for distributed applications. By centralizing configuration storage, applications can dynamically adapt to changes without restarts, improving maintainability and scalability.