Dev./java

[Spring Boot] property를 읽어들이는 순서

인쥭 2021. 7. 17. 21:34
반응형

참고

 

SpringBoot - 외부 프로퍼티 적용하기(application.properties)

application.properties SpringBoot를 구동시 동작할 포트 정보, DB정보 등 여러가지 세팅 관련된 데이터나 별도의 경로 옵션등의 값을 프로퍼티에 넣어두고 사용됩니다. 기본 프로퍼티 위치는 /src/main/resou

myhappyman.tistory.com

 

요약

  1. 실행시 명령어 매개변수
  2. Java System 속성
  3. OS 환경 변수
  4. @ProperySource 
  5. 패키징된 jar 외부의 애플리케이션 속성
  6. 패키징된 jar 내부의 애플리케이션 속성
  7. 기본 속성

 

실습

hello: ingnoh
@SpringBootApplication
@RestController
@Log4j2
public class DemoApplication {

    private final String injuk;

    public DemoApplication(@Value("${hello}") String injuk) {
        this.injuk = injuk;
    }

    @GetMapping("/")
    public String injuk() {
        log.info("Log now: " + injuk);
        return injuk;
    }
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}
  • 위 내용대로 build된 jar 파일을 준비하자.

 

1. 패키징된 jar의 내부 애플리케이션 속성

  • application.properties 또는 application.yml 등에 포함된 hello 속성을 그대로 사용하게 된다.
[~] java -jar [jar_파일_이름]

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.2)

// 생략
  • 웹 브라우저를 통해 http://localhost:8080 으로 접속하거나 다음과 같이 새로운 터미널을 열어 curl로 확인하자.
[~] curl localhost:8080
ingnoh%
[~]
  • application.yml의 hello: ingnoh 값이 그대로 반환되고 있다.

 

2. OS 환경 변수

  • 운영체제 자체에 동명의 환경변수가 설정되어 있다면, application.yml 등의 값을 무시하고 환경변수를 사용한다.
  • export를 활용하여 다음과 같이 진행하자.
[~] export hello=thisislocalenv
[~] echo $hello
thisislocalenv
[~] java -jar [jar_파일_이름]

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.2)

// 생략
  • 웹 브라우저를 통해 http://localhost:8080 으로 접속하거나 다음과 같이 새로운 터미널을 열어 curl로 확인하자.
[~] curl localhost:8080
thisislocalenv%
[~]
  • 여전히 application.yml에 hello: ingnoh로 설정되어 있으나, 환경변수의 값이 사용된다.
  • 즉, 환경변수의 값이 우선순위가 더 높다.

 

3. 실행시 명령어 매개변수로 전달

  • -D 옵션을 통해 동명의 매개변수 키 / 값을 전달한다.
java -jar -Dhello=newParameters! build/libs/demo-0.0.1-SNAPSHOT.jar                                                                                               

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.2)
// 생략
  • 웹 브라우저를 통해 http://localhost:8080 으로 접속하거나 다음과 같이 새로운 터미널을 열어 curl로 확인하자.
[~] curl localhost:8080
newParameters!%
[~]
  • application.yml의 hello 속성과 환경변수를 무시하고 -D 옵션에서 전달한 동명의 매개변수 값을 사용한다.
  • 즉, 앞의 두 경우보다 명령줄에 전달한 매개변수의 우선순위가 더 높다.