programing

Spring Boot : 속성이 .properties 파일에 있음에도 불구하고 Spring은 항상 속성에 기본값을 할당합니다.

muds 2023. 7. 30. 18:11
반응형

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주석이 달린 필드/파라미터

이 문제를 해결하려면 다음 중 하나를 수행할 수 있습니다.

  1. 구성에서 사용자 지정 값 구분 기호 사용

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

  1. 주문 속성을 사용하여 관련 구성자의 기본 설정을 늘립니다.

<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

반응형