programing

Spring 앱의 옵션 환경 변수

elseif 2023. 4. 4. 21:05

Spring 앱의 옵션 환경 변수

Spring Boot 앱에서application.properties정의는 다음과 같습니다.

someProp=${SOME_ENV_VARIABLE}

단, 이것은 특정 환경에서만 설정되는 옵션 값이기 때문에 다음과 같이 사용합니다.

@Value("${someProp:#{null}}")
private String someProp;

놀랍게도 이 오류는 env. var가 존재하지 않을 때 발생합니다.
Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
나는 스프링이 아무것도 찾을 수 없는 경우 빈 값을 설정할 것이라고 예상했습니다.PropertySource.

옵션화 방법

에서 기본값을 지정합니다.application.properties

someProp=${SOME_ENV_VARIABLE:#{null}}

다음과 같이 사용하는 경우@Value("${someProp}), 이것은 올바르게 평가됩니다.null첫째, 만약SOME_ENV_VARIABLE다음 경우 찾을 수 없습니다.application.properties처리 중입니다.그 값은 문자열 리터럴 "#{disternal}"이 됩니다.그리고나서,@Value평가하다somePropSpEL 표현으로서 결과적으로null실제 값은 의 속성을 통해 확인할 수 있습니다.Environment콩.

이 솔루션은 클래스에서 지정된 기본값 구문을 사용합니다.

기본 속성 값은 속성 속성을 통해 각 구성자 인스턴스에 대해 글로벌하게 정의하거나 기본값 구분자 ":"를 사용하여 속성별로 정의할 수 있으며 setValueSeparator(String)를 통해 커스터마이즈할 수 있습니다.

Spring SpEL 표현식 템플릿이 있습니다.

외부 설정에 관한 Spring Boot 문서에서

마지막으로 SpEL 식을 @Value에 쓸 수 있지만 이러한 식은 응용 프로그램 속성 파일에서 처리되지 않습니다.

이 작업은 다음과 같습니다.

spring.datasource.url=jdbc:mysql://${DB_IP:localhost}:3306/app
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:mylocaluser}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:localpass}

이것은 아마 여기 오는 다른 사람들에게 흥미로울 것이기 때문에 env 변수가 있는 속성 파일을 암묵적으로 덮어쓸 수 있습니다.재산이 있다고 칩시다.

someapp.foo

그런 다음 env 변수를 정의할 수 있습니다.SOMEAPP_FOO(대문자와 .-> _ ) 및 spring은 env. 변수에서 속성을 암묵적으로 설정합니다.

여기에 기재되어 있다

https://www.tutorialworks.com/spring-boot-kubernetes-override-properties/

언급URL : https://stackoverflow.com/questions/47580247/optional-environment-variables-in-spring-app