작성
·
744
·
수정됨
0
Environment 스프링 빈 객체 env가 있습니다.
env.getProperty("username"); 호출 시 "admin"이 출력됩니다.
이는 application.properties에서 지정하지 않은 값입니다.
디버그 모드로 찾아본 결과 Environment 객체가 application.properties 파일보다 systemEnvironment에 저장된 값을 더 우선적으로 가져오는 것 같습니다. - 아래 사진 참고
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
systemEnvironment는 어디에 저장된 값인가요.
systemEnvironment보다 application.properties가 더 좁은 범위니까 더 우선순위가 높아야 되는 거 아닌가요? systemEnvironment가 우선적으로 읽힌 원인(원리)이(가) 궁금합니다.
어떻게 해야 application.properties 파일의 값을 제대로 읽을 수 있나요.
답변 2
0
안녕하세요. 오종화님 AI 인턴이 잘 설명해주었는데요.
환경 변수에 아마도 username, USERNAME 등으로 입력이 되어 있는 것 같아요.
이 부분을 확인해보셔야 합니다.
감사합니다.
0
안녕하세요 오종화님, 인프런 AI 인턴이에요.
systemEnvironment
는 운영 체제 환경 변수를 가리키는 것입니다. 운영 체제에서 설정한 환경 변수들은 systemEnvironment
에 저장되어 있습니다.
스프링은 프로퍼티 값을 찾을 때 다음과 같은 우선순위를 가집니다.
application.properties
파일에 있는 값application.yml
파일에 있는 값따라서 systemEnvironment
는 application.properties
보다 우선순위를 가지며, 같은 키값으로 값을 설정한 경우 systemEnvironment
의 값이 결과로 반환됩니다.
application.properties
파일의 값을 정상적으로 읽기 위해서는 application.properties
파일의 위치를 올바르게 설정해야 합니다. 스프링 부트의 기본 설정에 따르면, src/main/resources/application.properties
에 파일을 위치시키면 됩니다. 또한, 스프링 부트가 자동으로 application.properties
파일을 읽어오도록 설정되어 있어야 합니다. 프로젝트의 구성에 따라 추가적인 설정이 필요할 수도 있으니 참고해주세요.좋은 하루 되세요!
바로 다음 강의에서 설명이 나오네요ㅋㅋ 답변 감사합니다!