ConfigurationProperties


Spring Boot এ অনেক সময় আমাদের নিজস্ব configuration তৈরি করার দরকার পড়ে। তখন কাজে লাগে ConfigurationProperties অ্যানোটেশন


ConfigurationProperties এনোটেশন  কীভাবে কাজ করে?

১ ।  এই অ্যানোটেশন Spring Boot-কে বলে দেয় — “এই prefix দিয়ে শুরু হওয়া সব কনফিগারেশন এই ক্লাসে bind করো।
২ ।  ConfigurationProperties এনোটেশন  দিয়ে আমরা application.yml বা application.properties ফাইলের কনফিগারেশনকে Java ক্লাসে map করতে পারি। 
৩।  এটা nested (হায়ারার্কিকাল) configuration-এর ক্ষেত্রেও কাজ করে।


উদাহরণ

@Component
@ConfigurationProperties(prefix = "app")
@Setter 
@Gettrer 
public class AppConfig {

    private Database database;
    private List<Service> services;
    

    // Nested static class: Database config
    @Setter 
    @Getter 
public static class Database { private String url; private String username; private String password; } // Nested static class: Service config @Setter @Getter public static class Service { private String name; private int timeout; } }


application.yml ফাইল

app:
  database:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
  services:
    - name: email
      timeout: 5000
    - name: payment
      timeout: 3000


কীভাবে কাজ করে

- @ConfigurationProperties(prefix = "app") বলছে, Spring Boot app দিয়ে শুরু হওয়া সব কনফিগারেশন এই ক্লাসে bind করবে

- database অংশটা যাবে AppConfig.Database ক্লাসে

- services অংশটা AppConfig.Service অবজেক্টের লিস্টে ম্যাপ হবে

 

আরও কিছু উদাহরণ দেওয়া হলো 

উদাহরণ ১: কাস্টম Mail Configuration

@Component
@ConfigurationProperties(prefix = "mail")
@Setter
@Getter
public class MailConfig {
    private String host;
    private int port;
    private String username;
    private String password;
}


application.yml

mail:
  host: smtp.gmail.com
  port: 587
  username: myemail@gmail.com
  password: secret123


ব্যবহার:

@Service
@RequiredArgsConstructor
public class EmailService {

    private final MailConfig mailConfig;

    public void printMailInfo() {
        System.out.println("Mail host: " + mailConfig.getHost());
    }
}


 উদাহরণ ২: List ও Map সহ Configuration

@Component
@ConfigurationProperties(prefix = "app")
@Setter
@Getter
public class AppConfig {
    private List<String> admins;
    private Map<String, String> endpoints;
}


application.yml

app:
  admins:
    - maruf
    - rihan
  endpoints:
    user: /api/v1/users
    product: /api/v1/products


ব্যবহার:

@Autowired
private AppConfig appConfig;

public void showConfig() {
    System.out.println(appConfig.getAdmins());
    System.out.println(appConfig.getEndpoints().get("user"));
}


উদাহরণ ৩: Enum ব্যবহার করে Configuration

@Component
@ConfigurationProperties(prefix = "server")
@Setter
@Getter
public class ServerConfig {
    private Mode mode;

    public enum Mode {
        DEV, TEST, PROD
    }
}


application.yml

server:
  mode: DEV


ব্যবহার:

@Autowired
private ServerConfig serverConfig;

public void checkEnv() {
    if (serverConfig.getMode() == ServerConfig.Mode.DEV) {
        System.out.println("Running in DEV mode");
    }
}


উদাহরণ ৪: Nested Object সহ Configuration (API client setup)

@Component
@ConfigurationProperties(prefix = "external.api")
@Setter
@Getter
public class ExternalApiConfig {
    private String baseUrl;
    private Auth auth;

    @Setter
    @Getter
    public static class Auth {
        private String clientId;
        private String clientSecret;
    }
}


application.yml

external:
  api:
    base-url: https://api.example.com
    auth:
      client-id: abc123
      client-secret: xyz789


ব্যবহার:

@Autowired
private ExternalApiConfig config;

public void callApi() {
    System.out.println("Base URL: " + config.getBaseUrl());
    System.out.println("Client ID: " + config.getAuth().getClientId());
}


উদাহরণ ৫: Validation সহ Configuration

@Component
@ConfigurationProperties(prefix = "storage")
@Validated
@Setter
@Getter
public class StorageConfig {

    @NotBlank
    private String location;

    @Min(1)
    @Max(100)
    private int maxFiles;
}


application.yml

storage:
  location: /data/files
  max-files: 10


ব্যবহার:

@Autowired
private StorageConfig storageConfig;

যদি ভুল কনফিগারেশন দেওয়া হয় (যেমন max-files: 0), তাহলে Spring Boot স্টার্টআপেই exception দেবে।