Profiles
প্রায় প্রতিটি Spring Boot প্রজেক্টেই আমাদের আলাদা Environment থাকে — যেমনঃ
- development (লোকাল ডেভেলপমেন্টের জন্য)
- staging (টেস্ট সার্ভার),
- production (লাইভ সার্ভার)
প্রত্যেক Environment-এ আলাদা আলাদা কনফিগারেশন দরকার হয় — যেমন Database URL, Logging level, API key ইত্যাদি। এখানেই Spring Profiles আমাদের জীবন সহজ করে দেয়।
Spring Profile কী?
Spring Profile basically একটি লজিক্যাল গ্রুপ, যেখানে তুমি environment অনুযায়ী ভিন্ন configuration define করতে পারো। Spring Boot runtime-এ নির্দিষ্ট করে দেয় কোন profile active থাকবে, এবং সেই অনুযায়ী configuration লোড হয়।
উদাহরণ ১: আলাদা Properties ফাইল ব্যবহার করা
তুমি আলাদা ফাইল তৈরি করতে পারো প্রতিটি environment এর জন্য
src/main/resources/
├── application.yml
├── application-dev.yml
├── application-prod.yml
application.yml
spring:
profiles:
active: dev
application-dev.yml
server:
port: 8081
spring:
datasource:
url: jdbc:h2:mem:devdb
username: dev
password: secret
application-prod.yml
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://prod-db:5432/myapp
username: prod_user
password: strongpassRuntime এ কী হয়:
যখন তুমি অ্যাপ চালাও, তখন spring.profiles.active হিসেবে যেটা সেট করা থাকবে (এখানে dev), সেই ফাইলটি active হয় এবং অন্যগুলো ignore হয়।
উদাহরণ ২: Command Line দিয়ে Profile পরিবর্তন করা
তুমি চাইলে runtime এ profile বদলে দিতে পারো, properties ফাইল না পাল্টিয়েই।
# development profile এ রান করতে
mvn spring-boot:run -Dspring-boot.run.profiles=dev
# production profile এ রান করতে
mvn spring-boot:run -Dspring-boot.run.profiles=prod
অথবা JAR ফাইল রান করার সময়
java -jar app.jar --spring.profiles.active=prod
উদাহরণ ৩: @Profile অ্যানোটেশন ব্যবহার করে Bean conditionally লোড করা
public interface MessageService {
String getMessage();
}
@Service
@Profile("dev")
public class DevMessageService implements MessageService {
@Override
public String getMessage() {
return "Hello from Development Environment!";
}
}
@Service
@Profile("prod")
public class ProdMessageService implements MessageService {
@Override
public String getMessage() {
return "Hello from Production Environment!";
}
}
এখন যদি spring.profiles.active=dev থাকে, তাহলে DevMessageService bean লোড হবে।
আর যদি prod, তাহলে ProdMessageService লোড হবে।
উদাহরণ ৪: Multi-profile Configuration
একাধিক প্রোফাইল একসাথে activate করা যায়
spring:
profiles:
active: dev,api
তাহলে Spring Boot একাধিক configuration একত্রে merge করে লোড করবে।
ধরা যাক তোমার আছে application-api.yml এবং application-dev.yml —
তাহলে উভয় ফাইলের কনফিগ একসাথে merge হবে।
উদাহরণ ৫: Programmatically Active Profile সেট করা
তুমি চাওলে Java কোড থেকেই active profile সেট করতে পারো:
@SpringBootApplication
public class ProfileDemoApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(ProfileDemoApplication.class);
app.setAdditionalProfiles("dev");
app.run(args);
}
}
উদাহরণ ৬: Profile-specific Logging
তুমি চাওলে আলাদা logging config রাখতে পারো environment অনুযায়ী:
logback-spring.xml
logback-dev.xml
logback-prod.xml
এগুলোও একইভাবে profile অনুযায়ী active হবে।