Spring Cloud-এ Git Repository ব্যবহার করে কনফিগারেশন Externalize করা একটি শক্তিশালী বৈশিষ্ট্য, যা মাইক্রোসার্ভিস আর্কিটেকচারে কনফিগারেশন ম্যানেজমেন্ট সহজ করে। এটি আপনার অ্যাপ্লিকেশনের কনফিগারেশনকে একত্রে সংরক্ষণ করতে এবং সার্ভিসগুলোকে ডাইনামিকভাবে কনফিগারেশন আপডেট করতে সক্ষম করে, যার ফলে কনফিগারেশন পরিবর্তন করার জন্য সার্ভিসের রিইস্টার্ট করার প্রয়োজন হয় না।
Git Repository ব্যবহার করে কনফিগারেশন Externalize করার উপকারিতা:
- Centralized Configuration: সমস্ত সার্ভিসের কনফিগারেশন এক জায়গায় রাখা সম্ভব হয়।
- Dynamic Refresh: কনফিগারেশন পরিবর্তন করতে হলে সার্ভিস রিইস্টার্ট করার প্রয়োজন হয় না।
- Version Control: কনফিগারেশন ফাইলগুলো Git-এর মাধ্যমে ভার্সন কন্ট্রোল করা যায়, যা ট্র্যাকিং এবং রোলব্যাক সহজ করে।
Spring Cloud Config Server: Git Repository ব্যবহার করে কনফিগারেশন Externalize করা
Spring Cloud Config Server-এর মাধ্যমে Git Repository থেকে কনফিগারেশন লোড করা হয়। এর জন্য আপনাকে দুটি প্রধান উপাদান তৈরি করতে হবে:
- Spring Cloud Config Server (যা Git Repository থেকে কনফিগারেশন লোড করবে)
- Spring Cloud Config Client (যা Config Server থেকে কনফিগারেশন ব্যবহার করবে)
1. Spring Cloud Config Server Configuration
Spring Cloud Config Server তৈরি করতে প্রথমে একটি Spring Boot অ্যাপ্লিকেশন তৈরি করুন এবং spring-cloud-config-server ডিপেন্ডেন্সি যুক্ত করুন।
Maven Dependency (pom.xml)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Config Server Configuration (application.yml)
Config Server-এর জন্য application.yml বা application.properties ফাইল কনফিগার করুন। এখানে আমরা Git repository থেকে কনফিগারেশন ফাইল লোড করব।
server:
port: 8888 # Config server runs on port 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo # Replace with your Git repository URL
searchPaths: '{application}' # Optional: specifies which directory within the repo to search for config
clone-on-start: true # Optionally clone on start
username: your-username # Optional: if repository is private
password: your-password # Optional: if repository is private
Config Server Enablement (ConfigServerApplication.java)
Config Server সক্রিয় করতে @EnableConfigServer ব্যবহার করুন।
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);
}
}
2. Spring Cloud Config Client Configuration
Config Client একটি মাইক্রোসার্ভিস যা Config Server থেকে কনফিগারেশন ফাইল লোড করবে।
Maven Dependency (pom.xml)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Client Application Configuration (application.yml)
Config Client এ application.yml বা application.properties ফাইল কনফিগার করুন এবং Config Server URL উল্লেখ করুন।
spring:
application:
name: my-service # Name of the client service
cloud:
config:
uri: http://localhost:8888 # Config Server URL
Client Application Example (ClientApplication.java)
Config Client-এর একটি সাধারণ উদাহরণ:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
@GetMapping("/config-info")
public String getConfigInfo() {
return "Config loaded successfully from Config Server!";
}
}
3. Git Repository Configuration File
Git Repository এ কনফিগারেশন ফাইলগুলো রাখুন। উদাহরণস্বরূপ, যদি আপনার মাইক্রোসার্ভিসের নাম my-service হয়, তবে আপনার Git repository এ একটি my-service.yml অথবা application.yml ফাইল থাকতে হবে।
Example my-service.yml in Git Repo:
server:
port: 8081 # Custom port for this client
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: user
password: password
4. Refresh Configuration Dynamically
Spring Cloud Config Server এবং Client এর সাহায্যে কনফিগারেশনকে ডাইনামিকালি রিফ্রেশ করা যায়, অর্থাৎ কনফিগারেশন পরিবর্তন করলেও সার্ভিস রিইস্টার্ট করার প্রয়োজন হয় না।
Actuator Endpoint for Refresh (Client Application)
Config Client এ spring-boot-starter-actuator ডিপেন্ডেন্সি যুক্ত করুন।
Maven Dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Config Client এর application.yml এ রিফ্রেশ কল করার জন্য @RefreshScope এবং /actuator/refresh এনডপয়েন্ট সক্রিয় করুন।
Add @RefreshScope annotation:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
public class ConfigController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/config-port")
public String getConfigPort() {
return "Server port from config: " + serverPort;
}
}
Trigger Refresh:
কনফিগারেশন রিফ্রেশ করতে, /actuator/refresh এ HTTP POST রিকোয়েস্ট পাঠান।
curl -X POST http://localhost:8081/actuator/refresh
এটি কনফিগারেশন পুনরায় লোড করবে এবং যেকোনো পরিবর্তন অ্যাপ্লিকেশনে প্রতিফলিত হবে।
5. Spring Cloud Config Server with GitHub Example
Config Server এবং Client এর পুরো কাঠামো GitHub ব্যবহার করে কনফিগারেশন ম্যানেজমেন্টের জন্য সাজানো যায়। যখন কনফিগারেশন GitHub repository থেকে সরবরাহ করা হয়, তখন এটি ডেভেলপারদের জন্য খুবই সুবিধাজনক এবং কনফিগারেশন আপডেট এবং রোলব্যাক সহজ হয়।
উপসংহার:
Spring Cloud Config Server এবং GitHub repository ব্যবহার করে কনফিগারেশন Externalize করার মাধ্যমে আপনি মাইক্রোসার্ভিস আর্কিটেকচারের জন্য সেন্ট্রালাইজড কনফিগারেশন ম্যানেজমেন্ট বাস্তবায়ন করতে পারেন। এর মাধ্যমে আপনি আপনার সার্ভিসের কনফিগারেশন সহজভাবে ম্যানেজ এবং ডাইনামিকভাবে আপডেট করতে পারবেন, যেটি সিস্টেমের ফ্লেক্সিবিলিটি এবং মেইনটেনিবিলিটি বৃদ্ধি করবে।
যদি আরো কোনো অংশে সাহায্য বা বিস্তারিত ব্যাখ্যা প্রয়োজন হয়, জানাবেন! 😊
Read more