스프링 부트
스프링 부트 Profile별로 다른 환경 구성
newwisdom
2021. 8. 6. 14:16
반응형
2021-06-09글
Profile?
- 애플리케이션 일부 configuration을 분리하고 싶을 때 사용
- 애플리케이션 일부 configuration을 특정 환경에서만 가능하게 하고 싶을 때 사용
- 개발 환경에 따라 설정값을 달르게 로딩할 때
@Profile
@Component, @Configuration, @ConfigurationProperties
을@Profile
와 함께 선언
@Configuration
@Profile("production")
public class ProductionConfiguration {
// ...
}
- 어플리케이션 실행시
spring.profiles.active
프로퍼티로 프로파일을 지정하면 해당 프로파일일 경우에만 해당 빈이 등록됨
application-properties
spring.profiles.active=dev,hsqldb
Example
- application-properties에 다음과 같이 정의
spring.profiles.active=prod
@Profile
어노테이션과 함께@Configuration
등록
- 어플리케이션 실행시 active한 prod에 등록된 hello 빈이 출력됨
@Profile과 @ActiveProfiles
- 서로 다른 환경에서 서로 다른 profile을 활성화하여 필요한 빈만 등록하도록 하는 어노테이션
@Profile
은 SpringBootApplication을 실행할 때 사용@ActiveProfiles
은 테스트 환경에서 사용
application.properties
- application-{profile}.properties 형식으로 파일 생성
- 이는
@ConfigurationProperties
로 간주되고 로드됨- *.properties , *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서(바인딩) 사용할 수 있게 해주는 어노테이션
- application-{profile}.properties은 application.properties 보다 우선순위가 높게됨
- 빌드할 때 다음과 같은 명령어와 함께 특정 환경설정을 적용할 수 있음
--spring.profiles.active=production
- properties 파일에
spring.profiles.include
를 통해 추가할 프로파일을 설정할 수 있음
Example
application-properties
spring.profiles.active=dev
profile-common.name = default_name_mazzi
defaultonly.name = defualt_name
application-prod.properties
profile-common.name = test_name_mazzi
testonly.name = test_name
application-dev.properties
profile-common.name = dev_name_mazzi
devonly.name = dev_name
AppRunner
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
Environment env;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("=====================================================");
System.out.println("spring.profiles.active : " + args.getOptionValues("spring.profiles.active"));
System.out.println("Enviroment's Active Profile : " + Arrays.toString(env.getActiveProfiles()));
System.out.println("defaultonly.name : " + env.getProperty("defaultonly.name"));
System.out.println("testonly.name : " + env.getProperty("testonly.name"));
System.out.println("devonly.name : " + env.getProperty("devonly.name"));
System.out.println("profile-common.name : " + env.getProperty("profile-common.name"));
System.out.println("=====================================================");
}
}
실행 결과
- profile-common.name는 모든 프로퍼티 파일이 공통으로 가진 프로퍼티
- dev 프로파일을 활성화
- 공통 속성인
profile-common.name
은 우선순위가 높은 dev 프로파일의 것으로 오버라이드 됨
참고자료
- 공식문서
- 스프링부트 프로파일(Springboot Profile)로 다른 환경 구성하기
- [스프링 부트 프로파일(Spring Boot Profile)](
반응형