Dev./java
[Spring Boot] property를 읽어들이는 순서
인쥭
2021. 7. 17. 21:34
반응형
참고
요약
- 실행시 명령어 매개변수
- Java System 속성
- OS 환경 변수
- @ProperySource
- 패키징된 jar 외부의 애플리케이션 속성
- 패키징된 jar 내부의 애플리케이션 속성
- 기본 속성
실습
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 옵션에서 전달한 동명의 매개변수 값을 사용한다.
- 즉, 앞의 두 경우보다 명령줄에 전달한 매개변수의 우선순위가 더 높다.