What is Spring Cloud Config?

Spring Cloud Config is a tool designed to manage configuration properties for distributed systems. It provides a centralized configuration server that externalizes properties, making it easier to update and manage configurations without redeploying services.

Key Features

  • Centralized Management: Store all configurations in one place.
  • Dynamic Updates: Services can reload configurations without restarting.
  • Version Control Integration: Store configurations in a Git repository.

Setting Up Spring Cloud Config Server

Create a Spring Boot application and include the Spring Cloud Config dependency:

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

Add the @EnableConfigServer annotation to your main application class:

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

Specify the Git repository for configuration files in application.properties:

spring.cloud.config.server.git.uri=https://github.com/your-repo/config-repo

Setting Up Spring Cloud Config Client

Add the Spring Cloud Config dependency to client applications:

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

Configure the application to use the Config Server:

spring.cloud.config.uri=http://localhost:8888

Place application-specific properties in files named application.yml or application.properties within the Git repository.

Centralized Configuration in C# with .NET Framework

In .NET Framework, use Azure App Configuration or similar tools to centralize settings. Install the required NuGet package:

Install-Package Microsoft.Extensions.Configuration.AzureAppConfiguration

Set up the configuration provider in your application:

public class Program {
  public static void Main(string[] args) {
    var builder = new ConfigurationBuilder();
    builder.AddAzureAppConfiguration("Endpoint=https://your-config.azconfig.io;Id=your-id;Secret=your-secret");
    var configuration = builder.Build();

    Console.WriteLine(configuration["AppSettingKey"]);
  }
}

Dynamic Refresh with Spring Cloud Config

Enable dynamic refresh by including the Spring Actuator dependency:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Annotate beans with @RefreshScope to reload properties dynamically:

@RestController
@RefreshScope
public class ConfigController {
  @Value("${config.property}")
  private String property;

  @GetMapping("/property")
  public String getProperty() {
    return property;
  }
}

Dynamic Refresh in .NET

In .NET, dynamic refresh is achievable using configuration libraries like Microsoft.Extensions.Configuration.AzureAppConfiguration. Enable refresh using the ConfigureRefresh method:

var options = new AzureAppConfigurationOptions();
options.ConfigureRefresh(refreshOptions => {
  refreshOptions.Register("AppSettingKey");
});

Benefits of Centralized Configuration

  • Simplified Management: Update configurations from a single source.
  • Consistency: Ensure uniform configuration across services.
  • Version Control: Track changes and revert to previous states if needed.

Conclusion

Centralized configuration management with Spring Cloud Config or .NET solutions like Azure App Configuration ensures a seamless and efficient way to manage properties in distributed systems. By externalizing configurations, teams can achieve better scalability, consistency, and manageability.