برای استفاده از Spring در پروژه باید آنرا مطابق نیازمان پیکره بندی کنیم در Spring چند راه حل از ساده ترین تا پیچیده ترین و انعطاف پذیرترین خالت برای این موضوع وجود دارد که باعث نشود هر دفعه نیاز داشته باشیم آنرا hardcode کنیم که در ادامه به آنها میپردازیم
حالت اول :
داشتن فایل properties. برای هر محیط کاری (dev, staging , production) که شامل سه فایل properties مجزا برای هر حالت کاری میشود :
persistence-dev.properties
persistence-staging.properties
persistence-production.properties
در یک پروژه معمولی Maven این فایل های تنظیمات میتوانند در مسیر src/main/resources قرار گیرند. میتوان این فایل ها را در مسیر دیگری قرار داد ولی باید در نظر داشت که موقع deploy باید در دسترس باشند
حالت دوم :
با استفاده از فایل تنظیمات xml در Spring :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:property-placeholder
location="
classpath*:*persistence-${envTarget}.properties" />
</beans>
با استفاده از PropertySource@ :
@PropertySource({ "classpath:persistence-${envTarget:dev}.properties" })
در دو حالت بالا میبینیم که بجای معرفی تک تک فایل های تنظیمات با استفاده از الگو (placeholder) میتوانیم کلیه تنظیمات حالت مختلف کاری را معرفی کنیم
اجرای کد :
با تنظیم حالت کاری جاری انتخاب میکنیم که کدامیک از فایل های تنظیمات باید خوانده شود که از طریق متغییر محیطی سیستم عامل و همینطور خط فرمان جاوا هنگام اجرای کد :
-DenvTarget=dev
استفاده از تست :
برای حالت تست کافی است در فایل pom.xml حالت مورد نظر را انتخاب کنیم :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<envTarget>h2_test</envTarget>
</systemPropertyVariables>
</configuration>
</plugin>
در تگ envTarget مشخص میکنیم که کدام فایل تنظیمات مد نظر ماست در مثال فوق فایل persistence-h2_test.properties از مسیر src/test/resources خوانده خواهد شد
حالت پیچیده تر را میتوان با انعطاف بیشتری استفاده کرد مثلا از دیتابیس h2 در حالت تست استفاده کنیم و از دیتابیس mysql در حالت production که برای هر یک فایل properties جداگانه ای در نظر میگیریم و استفاده میکنیم