application.properties বা application.yml ফাইলে কনফিগারেশন সেট করা

Spring DI এবং Configuration Properties - স্প্রিং ডিপেনডেন্সি ইনজেকশন (ডিআই) (Spring Dependency Injection) - Java Technologies

287

Spring Framework-এ application.properties এবং application.yml ফাইল দুটি সাধারণ কনফিগারেশন ফাইল যা Spring Boot অ্যাপ্লিকেশনে পরিবেশগত কনফিগারেশন সংরক্ষণ এবং ইনজেক্ট করার জন্য ব্যবহৃত হয়। এই ফাইলগুলিতে ডাটাবেস কনফিগারেশন, সার্ভার পোর্ট, লগিং লেভেল এবং আরও অনেক সেটিংস রাখা যায়। Spring DI (Dependency Injection) ব্যবহার করে এই কনফিগারেশনগুলো Spring Beans-এ ইনজেক্ট করা যায়, যাতে অ্যাপ্লিকেশনের মধ্যে ডাইনামিক কনফিগারেশন ম্যানেজমেন্ট সহজ হয়।

Spring-এ এই কনফিগারেশন ফাইল ব্যবহার করার মাধ্যমে আপনি কনফিগারেশনগুলিকে externalize করতে পারেন, অর্থাৎ, অ্যাপ্লিকেশনটির লজিক থেকে কনফিগারেশন আলাদা রাখতে পারেন, যা পরিবেশ পরিবর্তন বা অন্যান্য কনফিগারেশন টুলগুলোর সাথে সামঞ্জস্যপূর্ণ হতে সহায়ক।


application.properties বা application.yml ফাইলে কনফিগারেশন সেট করা

১. application.properties ফাইল

application.properties ফাইলটি Spring Boot অ্যাপ্লিকেশনের জন্য অন্যতম জনপ্রিয় কনফিগারেশন ফাইল। এখানে আপনি বিভিন্ন কনফিগারেশন সেটিংস রাখতে পারেন। যেমন, ডাটাবেস কানেকশন, সার্ভার পোর্ট, লোগিং সেটিংস ইত্যাদি।

উদাহরণ: application.properties

# Server settings
server.port=8081

# Database settings
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password

# Logging settings
logging.level.org.springframework.web=DEBUG

এই কনফিগারেশনগুলির মাধ্যমে, Spring Boot অ্যাপ্লিকেশন শুরু হলে এই ভ্যালুগুলি ইনজেক্ট হয়ে যাবে এবং ব্যবহৃত হবে।

২. application.yml ফাইল

Spring Boot অ্যাপ্লিকেশনগুলিতে application.yml ফাইলটি YAML ফরম্যাটে কনফিগারেশন সরবরাহ করতে ব্যবহৃত হয়। YAML ফাইলটি মানব-পাঠযোগ্য এবং স্ট্রাকচারড, যার কারণে এটি বড় কনফিগারেশন ফাইলগুলির জন্য আরও সুবিধাজনক হতে পারে।

উদাহরণ: application.yml

server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

logging:
  level:
    org.springframework.web: DEBUG

এখানে, YAML ফাইলটি application.properties ফাইলের সমান কনফিগারেশন ধারণ করছে, তবে YAML এর কাঠামো ভিন্ন। YAML ফাইলের গঠন দেখতে একটু বেশি পাঠযোগ্য এবং আর্গুমেন্টগুলোর মধ্যে সম্পর্ক স্পষ্ট থাকে।


Spring-এ কনফিগারেশন ইনজেক্ট করা

১. @Value Annotation ব্যবহার করে কনফিগারেশন ইনজেক্ট করা

Spring DI ব্যবহারের মাধ্যমে কনফিগারেশন ফাইল থেকে মান (value) ইনজেক্ট করতে @Value অ্যানোটেশন ব্যবহার করা হয়।

উদাহরণ: @Value দিয়ে application.properties বা application.yml ফাইল থেকে কনফিগারেশন ইনজেক্ট করা

@Component
public class DatabaseService {

    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Value("${spring.datasource.username}")
    private String dbUsername;

    @Value("${spring.datasource.password}")
    private String dbPassword;

    public void connect() {
        System.out.println("Connecting to database at " + dbUrl);
        // Database connection logic
    }
}

ব্যাখ্যা:

  • @Value("${property.name}") ব্যবহার করে কনফিগারেশন ফাইল থেকে ডেটাবেসের ইউআরএল, ইউজারনেম এবং পাসওয়ার্ড ইনজেক্ট করা হয়েছে।
  • Spring কনটেইনার এই মানগুলিকে application.properties বা application.yml থেকে প্রাপ্ত কনফিগারেশন ফাইলের মান অনুযায়ী ইনজেক্ট করবে।

২. @ConfigurationProperties ব্যবহার করে কনফিগারেশন ইনজেক্ট করা

Spring Boot-এর @ConfigurationProperties অ্যানোটেশনটি একটি ক্লাসে কনফিগারেশন প্রপার্টি মেপিং করতে ব্যবহৃত হয়। এটি ব্যবহার করে আপনি কনফিগারেশন ফাইলের একটি নির্দিষ্ট অংশকে একটি Java ক্লাসের প্রপার্টি হিসেবে ম্যাপ করতে পারেন।

উদাহরণ: @ConfigurationProperties ব্যবহার করে কনফিগারেশন ইনজেক্ট করা

@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DatabaseConfig {

    private String url;
    private String username;
    private String password;

    // Getters and setters
    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void connect() {
        System.out.println("Connecting to database at " + url);
        // Database connection logic
    }
}

ব্যাখ্যা:

  • @ConfigurationProperties(prefix = "spring.datasource") দ্বারা application.properties বা application.yml ফাইলের ডাটাবেস সম্পর্কিত কনফিগারেশনগুলি DatabaseConfig ক্লাসে ইনজেক্ট করা হয়েছে।
  • এই পদ্ধতি ব্যবহার করে আপনি অনেকগুলি কনফিগারেশন প্রপার্টিকে একসাথে ম্যানেজ করতে পারেন।

৩. Profile-based Configuration

Spring Profiles ব্যবহার করে আপনি বিভিন্ন কনফিগারেশন সেট করতে পারেন নির্দিষ্ট পরিবেশের জন্য (যেমন ডেভেলপমেন্ট, টেস্টিং, প্রোডাকশন ইত্যাদি)। application.properties বা application.yml ফাইলে spring.profiles.active প্রপার্টি সেট করে একটি নির্দিষ্ট প্রোফাইল সক্রিয় করা হয়।

উদাহরণ: application.properties এ Profiles ব্যবহার

# application.properties for development environment
spring.profiles.active=dev

# Development profile specific configuration
spring.datasource.url=jdbc:mysql://localhost:3306/devdb
spring.datasource.username=devuser
spring.datasource.password=devpassword

উদাহরণ: application.yml এ Profiles ব্যবহার

spring:
  profiles:
    active: dev

spring.datasource:
  url: jdbc:mysql://localhost:3306/devdb
  username: devuser
  password: devpassword

এখন, Spring কনটেইনারের মধ্যে ডেভেলপমেন্ট প্রোফাইলের কনফিগারেশনটি সক্রিয় থাকবে এবং সেই অনুযায়ী নির্ভরতাগুলি ইনজেক্ট হবে।


সারাংশ

Spring Framework-এ application.properties এবং application.yml ফাইলগুলি ব্যবহারের মাধ্যমে আপনি সহজেই কনফিগারেশন এক্সটার্নালাইজ করতে পারেন এবং Spring DI ব্যবহার করে এগুলি Java ক্লাসে ইনজেক্ট করতে পারেন। @Value এবং @ConfigurationProperties অ্যানোটেশনগুলির মাধ্যমে আপনি কনফিগারেশন ফাইল থেকে ডাইনামিক ডেটা ইনজেক্ট করতে পারেন, যা অ্যাপ্লিকেশনটি আরও নমনীয় এবং পরিবেশে নির্ভরশীল করে তোলে। Spring Profiles ব্যবহার করে নির্দিষ্ট পরিবেশে বিভিন্ন কনফিগারেশন সেট করা সম্ভব, যা ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন ব্যবস্থাপনার জন্য অত্যন্ত কার্যকরী।

Content added By
Promotion

Are you sure to start over?

Loading...