برای استفاده از 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 جداگانه ای در نظر میگیریم و استفاده میکنیم