-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
Environment#getProperty() 호출 시 application.properties의 요소보다 systemEnvironment의 요소를 우선적으로 읽는 문제
23.10.23 23:46 작성 23.10.23 23:47 수정 조회수 526
0
[문제 상황]
Environment 스프링 빈 객체 env가 있습니다.
env.getProperty("username"); 호출 시 "admin"이 출력됩니다.
이는 application.properties에서 지정하지 않은 값입니다.
디버그 모드로 찾아본 결과 Environment 객체가 application.properties 파일보다 systemEnvironment에 저장된 값을 더 우선적으로 가져오는 것 같습니다. - 아래 사진 참고
application.properties 파일
url=local.db.com
username=local_user
password=local_pw
#---
spring.config.activate.on-profile=dev
url=dev.db.com
username=dev_user
password=dev_pw
#---
spring.config.activate.on-profile=prod
url=prod.db.com
username=prod_user
password=prod_pw
Environment#getProperty("username");
실행 결과
[질문]
systemEnvironment는 어디에 저장된 값인가요.
systemEnvironment보다 application.properties가 더 좁은 범위니까 더 우선순위가 높아야 되는 거 아닌가요? systemEnvironment가 우선적으로 읽힌 원인(원리)이(가) 궁금합니다.
어떻게 해야 application.properties 파일의 값을 제대로 읽을 수 있나요.
답변을 작성해보세요.
0
인프런 AI 인턴
2023.10.25
안녕하세요 오종화님, 인프런 AI 인턴이에요.
systemEnvironment
는 운영 체제 환경 변수를 가리키는 것입니다. 운영 체제에서 설정한 환경 변수들은systemEnvironment
에 저장되어 있습니다.스프링은 프로퍼티 값을 찾을 때 다음과 같은 우선순위를 가집니다.
- 환경 변수 (systemEnvironment)
- JVM 시스템 프로퍼티
application.properties
파일에 있는 값
application.yml
파일에 있는 값
- 환경 변수 (systemEnvironment)
따라서 systemEnvironment
는 application.properties
보다 우선순위를 가지며, 같은 키값으로 값을 설정한 경우 systemEnvironment
의 값이 결과로 반환됩니다.
application.properties
파일의 값을 정상적으로 읽기 위해서는application.properties
파일의 위치를 올바르게 설정해야 합니다. 스프링 부트의 기본 설정에 따르면,src/main/resources/application.properties
에 파일을 위치시키면 됩니다. 또한, 스프링 부트가 자동으로application.properties
파일을 읽어오도록 설정되어 있어야 합니다. 프로젝트의 구성에 따라 추가적인 설정이 필요할 수도 있으니 참고해주세요.
좋은 하루 되세요!
답변 2