Environment#getProperty() 호출 시 application.properties의 요소보다 systemEnvironment의 요소를 우선적으로 읽는 문제
1002
작성한 질문수 7
[문제 상황]
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 파일의 값을 제대로 읽을 수 있나요.
답변 2
0
안녕하세요. 오종화님 AI 인턴이 잘 설명해주었는데요.
환경 변수에 아마도 username, USERNAME 등으로 입력이 되어 있는 것 같아요.
이 부분을 확인해보셔야 합니다.
감사합니다.
0
안녕하세요 오종화님, 인프런 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파일을 읽어오도록 설정되어 있어야 합니다. 프로젝트의 구성에 따라 추가적인 설정이 필요할 수도 있으니 참고해주세요.
좋은 하루 되세요!
보안이 엄격한 데이터
0
72
1
MyProperties 자체를 클라이언트 코드에서 사용
1
43
1
http://localhost:8080/actuator/prometheus
0
85
3
jar 추가에대한 질문드려도될까요?
0
64
1
build.gradle bom link 변경
0
64
2
@Counted 초기화
0
47
1
@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..
0
99
2
springboot에서 actuator없이 micrometer를 사용할수 있나요?
0
67
1
@Configuration 질문드립니다.
0
84
2
[공유] 터미널 말고 IDE 에서 jar 실행하기
0
98
1
localhost:8080/hello-servlet 404오류
0
123
2
내장톰캣2 서블릿 톰켓 실행이 안됩니다
1
153
2
최대 Tomcat 스레드 수를 확인하는 지표
0
159
1
mac m2에서 startup.sh 실행후 아무 반응이 없습니다.
0
94
2
내장 톰캣 실행 오류 관련 질문드립니다.
0
156
1
스프링 발전 과정들도 자세히 알아둬야하나요??
1
127
1
스프링부트 ioc 컨테이너 갯수
0
89
1
404 페이지
0
133
3
actuator 호출시 타임스탬프 질문
0
90
1
순수 라이브러리 사용하기 2 - memory-v1
0
125
1
외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.
0
105
1
서블릿 컨테이너 초기화1 강의 관련 질문입니다~
0
93
1
Thread Config Max 패널 설정 변경 질문
0
127
1
스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.
0
107
1





