개요
spring 3.1 부터 포함된 기능으로 환경에 맞게 적합한 profile 을 사용할 수 있게 하는 기능. maven profile 과 비슷한 역할을 한다고 보면 됨.
사용
application Context 의 beans 설정에 다음과 같이 profile 을 지정
<beans profile="devel">
<bean id="myBean" class="com.example.demo.DevelBean">
<property name="env" value="개발 profile"/>
</bean>
</beans>
<beans profile="production">
<bean id="myBean" class="com.example.demo.ProductionBean">
<property name="env" value="운영 profile"/>
</bean>
</beans>
CODE
profile 설정시 여러개의 profile 을 지정할수 있다
<beans profile="devel">
<bean id="myBean" class="com.example.demo.DevelBean">
<property name="env" value="개발 profile"/>
</bean>
</beans>
<beans profile="test,qa">
<bean id="myBean" class="com.example.demo.TestBean">
<property name="env" value="test, qa profile"/>
</bean>
</beans>
CODE
활성화
jvm property 로 전달
spring.profiles.active property 에 활성화할 프로파일명을 설정 (, 로 여러 개 설정 가능)
-Dspring.profiles.active=dev,profile2
CODE
web.xml 에 설정
web.xml 에 활성화할 프로파일 설정.
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
CODE
ApplicationContext 의 Environment 에 설정
@Autowired ConfigurableWebApplicationContext servContext;
private void setProfile(String newProfile) {
ConfigurableWebApplicationContext rootContext = (ConfigurableWebApplicationContext) servContext.getParent();
rootContext.getEnvironment().setActiveProfiles(newProfile);
rootContext.refresh();
// Refreshing Spring-servlet WebApplicationContext
servContext.getEnvironment().setActiveProfiles(newProfile);
servContext.refresh();
}
JAVA
@ActiveProfiles annotation 사용
jUnit 등으로 test case 를 돌릴 경우에 유용
package com.bank.service;
@RunWith(SpringJUnit4ClassRunner.class)
// ApplicationContext will be loaded from "classpath:/app-config.xml"
@ContextConfiguration("/app-config.xml")
@ActiveProfiles("dev")
public class TransferServiceTest {
@Autowired
private TransferService transferService;
@Test
public void testTransferService() {
// test the transferService
}
}
CODE
Ref