spring framework에서 제공해주는 기능.(https://velog.io/@max9106/Spring-ApplicationContext%EC%9D%98-%EA%B8%B0%EB%8A%A5%EB%93%A4-jnk5npcm3d)
특정한 프로파일에서만 특정한 Bean을 등록하고 싶다거나, 애플리케이션의 동작을 특정 프로파일 일때 Bean설정을 다르게 하고 싶다거나할 때 사용
config라는 디렉토리를 만들고, 2개의 Bean 설정을 만들어준다.
2개의 Bean 설정 클래스 모두 hello라는 Bean을 만들어준다.
그리고 각각 다른 프로파일을 붙여준다.
즉, BaseConfiguration은 프로파일이 prod 일 때만, 사용되고 그렇지 않을 때는 사용되지 않는다.
마찬가지로 TestConfiguration은 프로파일이 test 일 때만, 사용되고 그렇지 않을 때는 사용되지 않는다.
이 상태로 hello를 주입받아 사용하면 error가 발생한다.
스프링 부트에서는 application.properties에서 사용할 프로파일을 설정해 줄 수 있다.
이것을 적용해주면, 적용해준 프로파일의 hello가 출력됨을 볼 수 있다.
application.properties에서 사용한 spring.profiles.active도 프로퍼티이다.
프로파일용 프로퍼티를 만들어 줄 수도 있다.
prod용 프로퍼티 파일과, test용 프로퍼티 파일을 만들어주고, 각각 동일한 key값의 프로퍼티를 만들어준다.
이런 프로파일 관련된 프로퍼티 파일의 우선순위가 기본 application.properties 보다 높다.
mvn clean package 이후, java -jar spring-boot-practice-1.0-SNAPSHOT.jar --spring.profiles.active=prod
명령어로 터미널에서 실행해보면 프로파일이 prod로 설정되어 [prod]junseo가 찍힌다.(커맨드라인 명령어가 프로퍼티 파일의 우선순위보다 높기때문에 오버라이딩)
test도 마찬가지다.
프로퍼티 파일에 spring.profiles.include=
를 이용하여 추가할 프로파일을 설정할 수 있다.
이 설정이 읽혀졌을 때 추가할 프로파일(proddb)을 활성화 하라는 뜻이다.
즉, 아래와 같이 코드를 두고 --spring.profiles.active=prod로 실행하면, 프로파일이 prod로 실행되고, application-prod.properties에 의해 application-proddb.properties가 활성화되어 myProperties.getFullName 값은 proddb 프로퍼티에 정의되어 있는 [proddb]kimjunseo가 되는 것이다.
tip) 프로파일 값을 빌드때마다 주고 싶으면 아래와 같이 줄 수 있다.