매일 조금씩

[IoC 컨테이너와 빈] 6. Environment 2부. 프로퍼티 본문

Spring Framework/스프링 프레임워크 핵심 기술

[IoC 컨테이너와 빈] 6. Environment 2부. 프로퍼티

mezo 2024. 11. 17. 19:15
728x90
반응형

 

 

 

 

[전체 목차]

  1. IoC 컨테이너와 빈
  2. Resource / Validation
  3. 데이터 바인딩
  4. SpEL
  5. 스프링 AOP
  6. Null-Safety

 

 

1. 프로퍼티

  • 다양한 방법으로 정의할 수 있는 설정값
  • Environment의 역할은 프로퍼티 소스 설정 및 프로퍼티 값 가져오기

아래와 같이 애플리케이션 JVM 옵션으로 Active profiles 값을 설정해 두고.. (여기선 test로 설정)

아래처럼 env.getProperty("spring.profiles.active") 로 가져와서 로그를 찍으면..!

package com.test.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.Objects;

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationContext ctx;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        Environment env = ctx.getEnvironment();
        System.out.println(Arrays.toString(Objects.requireNonNull(env.getProperty("spring.profiles.active")).split(",")));
    }
}

위처럼 내가 설정해둔 값인 "test" 가 찍힌다.

 

 

2. 프로퍼티에는 우선 순위가 있다.

  • StandardServletEnvironment의 우선순위
    • ServletConfig 매개변수
    • ServletContext 매개변수
    • JNDI (java:comp/env/)
    • JVM 시스템 프로퍼티 (-Dkey=”value”)
    • JVM 시스템 환경 변수 (운영 체제 환경 변수)

 

3. @PropertySource

  • Environment를 통해 프로퍼티 추가하는 방법

더 효율적으로 properties를 설정하고 싶다! 하면 properties 파일을 하나 만들어서 (여기선 app.properties)

아래와 같이 어노테이션을 추가하면 된다.

그럼 아래와 같이 제대로 가져와서 출력도 되는걸 볼 수 있다.

 

 

 

4. 스프링 부트의 외부 설정 참고

  • 기본 프로퍼티 소스 지원 (application.properties)
  • 프로파일까지 고려한 계층형 프로퍼티 우선 순위 제공

계층형이라 JVM옵션으로 준 프로퍼티와 프로퍼티 파일을 하나 만들어서 적용한 프로퍼티 둘 중 하나만 찍힐텐데..

과연 어떤게 더 우선순위가 높을까?

 

 

JVM 옵션이 더 우선순위가 높다.

 

 

※ 요약

- Profile : 환경에 맞춰 사용할 수 있는 하나의 큰 설정 파일 그룹.
- Property : Profile 파일 안에 들어 있는 구체적인 설정 값.
- @Value: 코드 내에서 프로퍼티 값을 가져와서 사용할 수 있도록 해주는 어노테이션.

 

 

 

 

 

728x90
반응형