Spring @Value 주석에서 기본값을 올바르게 지정하는 방법은 무엇입니까?
처음에는 다음과 같은 사양을 가지고 있습니다.
@Value("#{props.isFPL}")
private boolean isFPL=false;
속성 파일에서 값을 가져오면 올바르게 작동합니다.
isFPL = true
그러나 다음 식을 기본값으로 사용하면 오류가 발생합니다.
@Value("#{props.isFPL:false}")
private boolean isFPL=false;
식을 구문 분석하지 못했습니다. 중첩된 예외는 org.springframework.expression.spel입니다.SpellParseException: EL1041E:(pos28): 유효한 식을 구문 분석한 후에도 'colon(:)' 식에 더 많은 데이터가 있습니다.
저도 # 대신 $를 사용하려고 했습니다.
@Value("${props.isFPL:true}")
private boolean isFPL=false;
그러면 주석의 기본값은 정상적으로 작동하지만 속성 파일에서 올바른 값을 가져오지 못했습니다.
사용해 보십시오.$
다음과 같이:
@Value("${props.isFPL:true}")
private boolean isFPL=false;
또한 다음을 설정해야 합니다.ignore-resource-no-found
true로 설정하면 속성 파일이 누락된 경우 기본값이 사용됩니다.
XML 기반 구성을 사용하는 경우 컨텍스트 파일에 다음을 배치합니다.
<context:property-placeholder ignore-resource-not-found="true"/>
Java 구성을 사용하는 경우:
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
p.setIgnoreResourceNotFound(true);
return p;
}
위해서int
유형 변수:
@Value("${my.int.config: #{100}}")
int myIntConfig;
참고: 대장 앞에는 공백이 없고 대장 뒤에는 여분의 공간이 있습니다.
질문의 정확한 대답은 매개 변수의 유형에 따라 다릅니다.
'String' 매개 변수의 경우 샘플 코드가 잘 작동합니다.
@Value("#{props.string.fpl:test}")
private String fpl = "test";
다른 유형(예: 질문의 부울)의 경우 다음과 같이 작성해야 합니다.
@Value("${props.boolean.isFPL:#{false}}")
private boolean isFPL = false;
또는 '정수'의 경우:
@Value("${props.integer.fpl:#{20}}")
Spring 응용프로그램 컨텍스트 파일에 아래와 같은 두 개 이상의 속성 Placeholder 빈이 포함되어 있습니까?
<context:property-placeholder ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:/*.local.properties" />
<context:property-placeholder location="classpath:/config.properties" />
이 경우 props.isFPL에 대한 속성 조회가 첫 번째 속성 파일(.local.properties)에 대해서만 수행되고, 속성을 찾을 수 없으면 기본값(true)이 적용되며 두 번째 속성 파일(config.properties)은 이 속성에 대해서는 사실상 무시됩니다.
문자열의 경우 다음과 같이 null로 기본 설정할 수 있습니다.
public UrlTester(@Value("${testUrl:}") String url) {
this.url = url;
}
속성을 로드하는 방법에 따라 다릅니다. 다음과 같은 방법을 사용할 경우
<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />
그리고나서@Value
처럼 보여야 합니다.
@Value("${isFPL:true}")
기본값이 문자열인 경우 다음과 같이 지정합니다.
@Value("${my.string.config: #{'Default config value'}}")
String myIntConfig;
기본값을 정의하는 이 방법은 @Value 주석에 "value=..."를 쓰는 경우에만 작동합니다.
작동하지 않음: @Value("${testUrl:some-url}" // 구성 파일에서 수행하는 작업에 관계없이 항상 "some-url"이 설정됩니다.
작동: @Value(값 = "${testUrl:some-url}" // 구성 파일에 testUrl 속성이 없는 경우에만 "some-url"이 설정됩니다.
언급URL : https://stackoverflow.com/questions/26916598/how-to-correctly-specify-a-default-value-in-the-spring-value-annotation
'source' 카테고리의 다른 글
Python에서 Google Authenticator 구현 (0) | 2023.08.15 |
---|---|
/usr/bin/codesign이 종료 코드 1과 함께 실패했습니다. (0) | 2023.08.15 |
jquery click on anchor 요소 힘을 맨 위로 스크롤하시겠습니까? (0) | 2023.08.15 |
문자열(C#)을 "곱"할 수 있습니까? (0) | 2023.08.15 |
PySpark에서 내림차순으로 정렬 (0) | 2023.08.15 |