Spring Profile 설정하기

단비·2023년 5월 22일
0

학습

목록 보기
60/66

개발, 운영 서버를 구분하기 위해 profile을 설정하며,
아래와 같이 4가지의 host가 있음

hostprofile
개발dev
테스트stage
알파alpha
상용prod

yml 설정

spring:
  profiles:
    active:
      - local
    group:
      local:
        - site-local
        - db-local
      dev:
        - site-dev
        - db-dev
    include:
      - db
      - my-service
      - site

spring-profiles-active

  • 활성화할 profile 설정

spring-profiles-group

  • profile이 (?)일 경우 하위 항목들의 profile과 그룹을 정의

spring-profiles-include

  • 설정을 통해 어플리케이션을 실행할 때 profile을 포함하여 실행할 수 있음
    예) application-db.yml, application-my-site.yml, application-site.yml 파일을 함께 profile에 포함하여 어플리케이션이 구동

profile = local 일 경우




yml의 --- 구분자

---을 이용하면 .yml 파일을 구분할 수가 있음
yml의 if 문으로 사용 가능

spring:
  profiles:
    active: test
---
spring:
  profiles: dev
server:
  port: 8080
---
spring:
  profiles: test
server:
  port: 8090

위의 예제로 보아 윗 부분은 defualt(application.yml),
바로 아래는 applicaton-dev.yml 역할을 하고,
맨마지막은 applicaton-test.yml 역할을 함




logback.xml에서 profile 정보 가져오기

1. springProfile

  • test일 경우 LOG_LEVEL 변수를 INFO로 설정하는 코드
<springProfile name="test">
	<property name="LOG_LEVEL" value="INFO" />-->
</springProfile>
<springProfile name="dev">
	<property name="LOG_LEVEL" value="DEBUG" />-->
</springProfile>

2. if문 활용

  • 의존성 추가 필요
<property resource="application.yml"/>
<if condition='"${spring.profiles.active}".equals("dev")'>
	<then>
		<property name="LOG_LEVEL" value="DEBUG" />
	</then>
	<else>
		<property name="LOG_LEVEL" value="INFO" />
	</else>
</if>




Java에서 profile 정보 가져오기

1. System.getProperty()

System.getProperty("spring.profiles.active");

2. Environment.getActiveProfiles()

import org.springframework.core.env.Environment;

@Component
@RequiredArgsConstructor
public class Test {
    private Environment environment;

    public String[] getActiveProfiles() {
        return environment.getActiveProfiles();
    }
}

3. @Value

  • 단순히 yml의 정보 가져오기
@Value("${spring.profiles.active}")
private String activeProfile;

4. @Profile

  • 특정 환경에서만 실행
@Profile("dev")                     // dev
public void Test

@Profile("!dev")                    // dev 제외
public void Test

@Profile({"qa", "stg"})             // qa, stg
public void Test

@Profile("!local | (qa & stg)")     // local 아니거나 qa, stg
public void Test

5. @ActionProfiles()

  • 특정 환경에서만 실행
  • @Profile 어노테이션과 차이는 테스트 수행 시에만 사용을 한다는 점
@ActionProfiles("dev")               
public class Test





참고사이트

Spring Boot profiles 설정하기
Spring Boot - Profile에 따른 properties(yml) 파일 설정하기
자바 스프링에서 Profile 정보 가져오기 (Spring Profiles Active)

profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글