출처 : https://sgc109.github.io/2020/07/06/spring-profiles/
Profiles 을 사용하면 애플리케이션이 실행되는 환경에 따라 다른 Bean 들을 매핑할 수 있다.
예를 들어, 개발 환경, 스테이징 환경, 혹은 실 서비스 환경에 따라 다른 의존성을 주입할 수 있다.
Profiles 구분하기
Bean 에 @Profile 붙이기
@Component
@Profile("dev")
public class DevDatasourceConfig
다음과 같이 특정 profile 이 active 하지 않을 때만 container 에 포함시킬 수도 있다.
@Component
@Profile("!dev")
public class DevDatasourceConfig
XML 에 정의하기
태그의 ”profiles” 속성으로 설정이 가능하다.
<beans profile="dev">
<bean id="devDatasourceConfig"
class="org.baeldung.profiles.DevDatasourceConfig" />
</beans>
Profiles 설정하기
WebApplicationInitializer 인터페이스를 통한 방법
ServletContext 를 코드 기반으로 설정해주기 위해 다음과같이 WebApplicationInitializer 를 사용할 수 있다.
@Configuration
public class MyWebApplicationInitializer
implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter(
"spring.profiles.active", "dev");
}
}
ConfigurableEnvironment 를 통한 방법
@Autowired
private ConfigurableEnvironment env;
...
env.setActiveProfiles("someProfile");
web.xml 를 통한 방법
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-config.xml</param-value>
</context-param>
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
JVM 파라미터를 통한 방법
-Dspring.profiles.active=dev
환경변수를 통한 방법
export spring_profiles_active=dev
테스트 시 @ActiveProfiles 를 통한 방법
테스트할 땐 profile 를 명시하는것이 매우 쉽다. 테스트 클래스에 다음과 같이 어노테이션을 붙여주면 된다.
@ActiveProfiles("dev")
- 여러가지를 함께 사용할 경우
위의 모든 방식들을 동시에 여러개 사용하는 경우 다음의 우선순위에 따라 결정된다. (우선순위가 높은 순으로)
- Context parameter in web.xml
- WebApplicationInitializer
- JVM System parameter
- Environment variable
- Maven profile
- 디폴트 Profile
만약 Profiles 를 지정하지 않으면 "default" profile 로 설정되며,
spring.profiles.default 프로퍼티를 통해 디폴트 profile 를 "default" 에서 다른 값으로 변경할 수 있다.
활성화된 Profiles 사용하기
Environment 를 통한 방법
public class ProfileManager {
@Autowired
private Environment environment;
public void getActiveProfiles() {
for (String profileName : environment.getActiveProfiles()) {
System.out.println("Currently active profile - " + profileName);
}
}
}
spring.active.profile 을 통한 방법
@Value("${spring.profiles.active}")
private String activeProfile;
그런데 만약 현재 active 한 profile 이 없는 경우에는 IllegalArgumentException 이 발생할 수 있으므로 default 값을 줘야한다.
@Value("${spring.profiles.active:}")
private String activeProfile;
Spring Boot 에서의 Profiles
스프링 부트는 위에 언급된 모든 profile 설정 방식은 물론, 몇가지 추가적인 기능을 제공한다.
properties 파일을 통한 방법
우선, 다음과같이 properties 파일에서 설정이 가능하다.
spring.profiles.active=dev
SpringApplication 클래스를 통한 방법
또한, 다음과같이 SpringApplication class 를 사용하여 코드 기반의 설정도 가능하다.
SpringApplication.setAdditionalProfiles("dev");
Profile 별 properties files
스프링 부트는 우선. application.properties 파일 내 모든 property 를 로드한 후,
active 된 profile 들에 대한 .properties 파일에 대해서만 property 를 로드한다.
'공부 > 스프링프레임워크' 카테고리의 다른 글
[토비의 스프링부트] Containerless (0) | 2023.02.19 |
---|---|
[spring] 디렉터리 구조 (0) | 2022.11.07 |
[session] 정리 잘 된 HTTP 쿠키와 톰캣 버전별 이슈 (0) | 2022.06.24 |
[spring] 토비의스프링 정리 (0) | 2022.06.22 |
[spring] 스프링 부트 레퍼런스 정리 (0) | 2022.05.09 |