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 <br>    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 দেবে।


Share