Spring Boot : 속성이 .properties 파일에 있음에도 불구하고 Spring은 항상 속성에 기본값을 할당합니다.
저는 Spring 4.0.7을 사용하는 Spring boot 1.1.8로 작업하고 있습니다.@Value 주석을 사용하여 클래스의 속성을 자동 배선합니다.속성 파일에 속성이 없는 경우 기본값을 사용하여 ":"를 사용하여 기본값을 할당합니다.다음은 예입니다.
@Value("${custom.data.export:false}")
private boolean exportData = true;
속성 파일에 속성이 없는 경우 변수에 false를 할당해야 합니다.그러나 파일에 속성이 있으면 기본값도 할당하고 속성 값도 무시합니다.예: 위에서 언급한 것과 같은 속성을 정의했는데 응용 프로그램 속성 파일에 다음과 같은 속성이 있는 경우custom.data.export=true
그렇다면, 의 가치.exportData
이상적으로 사실이어야 하지만 여전히 거짓일 것입니다.
제가 여기서 뭘 잘못하고 있는지 누가 안내해주실 수 있나요?
감사해요.
우리는 정확히 같은 증상을 가진 다음의 봄 벌레에 물렸습니다.
[SPR-9989] 여러 PropertyPlaceholderConfigurer 사용 @Value 기본값 동작
기본적으로 한 명 이상이PropertyPlaceholderConfigurer
응용 프로그램 컨텍스트에 있습니다. 미리 정의된 기본값만 해결되고 재정의는 수행되지 않습니다.다른 설정ignoreUnresolvablePlaceholders
가치는 문제에 아무런 영향을 미치지 않았으며, 여분을 제거한 후에는 두 값(참/거짓)이 모두 해당 측면에서 동일하게 잘 작동했습니다.PropertyPlaceholderConfigurer
.
조사해보면, 각각의 정의는PropertyPlaceholderConfigurer
예상대로 내부적으로 속성을 해결했지만 스프링은 값을 주입하기 위해 어떤 속성을 사용해야 하는지 파악하지 못했습니다.@Value
주석이 달린 필드/파라미터
이 문제를 해결하려면 다음 중 하나를 수행할 수 있습니다.
- 구성에서 사용자 지정 값 구분 기호 사용
<bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:${catalina.base}/conf/config2.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="valueSeparator" value="-defVal-"/>
</bean>
- 주문 속성을 사용하여 관련 구성자의 기본 설정을 늘립니다.
<bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:${catalina.base}/conf/config2.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="order" value="-2147483648"/>
</bean?
저는 이 문제에 대해 몇 가지 RnD를 했습니다. 여기서 이용할 수 있습니다.
@Ophir Radnitz가 언급했듯이, 이것은 애플리케이션 컨텍스트에 둘 이상의 Property Placeholder Configurer가 있을 때 발생하는 스프링 버그입니다.
해결 방법으로는 다음과 같은 방법으로 원하는 동작을 얻을 수 있습니다.
(...)
@Autowired
private Environment environment;
(...)
private Boolean shouldExportData()
{
return environment.getProperty( "custom.data.export", Boolean.class, Boolean.FALSE );
}
이 상황은 매개 변수의 유형에 따라 달라집니다.
을 String
합니다(" 라미터코파기, " 샘를으로사다용니합값본드플(▁parameter다니사"@Value("${custom.string:test}")
: )에 잘 합니다.boolean
같이 .
@Value("${custom.data.export:#{true}}")
private boolean exportData = true;
마가지로의 경우, 에대해.Integers
:
@Value("${custom.integer:#{20}}")
행운을 빌어요.
언급URL : https://stackoverflow.com/questions/28369582/spring-boot-spring-always-assigns-default-value-to-property-despite-of-it-bein
'programing' 카테고리의 다른 글
Oracle Forms에서 PL/SQL 부울 변수 평가 (0) | 2023.07.30 |
---|---|
사용자가 인증되지 않은 경우 Ajax 요청을 어떻게 처리합니까? (0) | 2023.07.30 |
웹 응용 프로그램의 SMS (0) | 2023.07.30 |
mariadb 덤프를 가져올 수 없습니다. (0) | 2023.07.30 |
PowerShell 코드 포맷기/예쁜 프린터가 있습니까? (0) | 2023.07.30 |