23.10.23 23:46 작성
·
696
·
수정됨
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
2023. 10. 27. 16:49
안녕하세요. 오종화님 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
파일을 읽어오도록 설정되어 있어야 합니다. 프로젝트의 구성에 따라 추가적인 설정이 필요할 수도 있으니 참고해주세요.좋은 하루 되세요!
2023. 10. 29. 15:28
바로 다음 강의에서 설명이 나오네요ㅋㅋ 답변 감사합니다!