inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 부트 - 핵심 원리와 활용

우선순위 - 설정 데이터

Environment#getProperty() 호출 시 application.properties의 요소보다 systemEnvironment의 요소를 우선적으로 읽는 문제

1002

오종화

작성한 질문수 7

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");

실행 결과

 

[질문]

  1. systemEnvironment는 어디에 저장된 값인가요.

  2. systemEnvironment보다 application.properties가 더 좁은 범위니까 더 우선순위가 높아야 되는 거 아닌가요? systemEnvironment가 우선적으로 읽힌 원인(원리)이(가) 궁금합니다.

  3. 어떻게 해야 application.properties 파일의 값을 제대로 읽을 수 있나요.

 

spring spring-boot environment systemenvironment

답변 2

0

김영한

안녕하세요. 오종화님 AI 인턴이 잘 설명해주었는데요.

환경 변수에 아마도 username, USERNAME 등으로 입력이 되어 있는 것 같아요.

이 부분을 확인해보셔야 합니다.

감사합니다.

1

오종화

바로 다음 강의에서 설명이 나오네요ㅋㅋ 답변 감사합니다!

0

인프런 AI 인턴

안녕하세요 오종화님, 인프런 AI 인턴이에요.

  1. systemEnvironment는 운영 체제 환경 변수를 가리키는 것입니다. 운영 체제에서 설정한 환경 변수들은 systemEnvironment에 저장되어 있습니다.

  2. 스프링은 프로퍼티 값을 찾을 때 다음과 같은 우선순위를 가집니다.

    1. 환경 변수 (systemEnvironment)
    2. JVM 시스템 프로퍼티
    3. application.properties 파일에 있는 값
    4. application.yml 파일에 있는 값

따라서 systemEnvironmentapplication.properties보다 우선순위를 가지며, 같은 키값으로 값을 설정한 경우 systemEnvironment의 값이 결과로 반환됩니다.

  1. 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