복붙노트

[SPRING] Spring 부트 : Spring은 .properties 파일에 존재 함에도 불구하고 항상 디폴트 값을 속성에 할당합니다.

SPRING

Spring 부트 : Spring은 .properties 파일에 존재 함에도 불구하고 항상 디폴트 값을 속성에 할당합니다.

스프링 4.0.7을 사용하는 스프링 부트 1.1.8과 함께 일하고 있습니다. @Value 주석을 사용하여 클래스의 속성을 autowiring하고 있습니다. 속성이 속성 파일에 없으면 기본값을 갖고 싶기 때문에 ":"을 사용하여 기본값을 할당합니다. 아래는 그 예입니다 :

@Value("${custom.data.export:false}")
private boolean exportData = true;

프로퍼티가 프로퍼티 파일에 존재하지 않으면 변수에 false를 할당해야합니다. 그러나 파일에 특성이 있으면 기본 값을 지정하고 특성 값을 무시합니다. 예 : 위에 언급 한 것과 같은 속성을 정의하고 응용 프로그램 속성 파일에 custom.data.export = truethen과 같은 내용이있는 경우 exportData의 값은 여전히 ​​false이지만 실제로는 이상적이어야합니다.

아무도 내가 여기서 뭘 잘못하고 있는지 안내 해줄 수 있습니까?

감사

해결법

  1. ==============================

    1.우리는 정확히 같은 증상을 가진 다음의 Spring 버그에 물렸다 :

    우리는 정확히 같은 증상을 가진 다음의 Spring 버그에 물렸다 :

    [SPR-9989] PropertyPlaceholderConfigurer를 여러 개 사용하면 @Value 기본 값 동작이 깨집니다.

    기본적으로 두 개 이상의 PropertyPlaceholderConfigurer가 ApplicationContext에 존재하면 사전 정의 된 기본값 만 해석되고 재정의는 발생하지 않습니다. 다른 ignoreUnresolvablePlaceholders 값을 설정해도 문제에 영향을 미치지 않으며 추가 PropertyPlaceholderConfigurer를 제거한 후에 두 값 (true / false)이 똑같이 잘 작동합니다.

    이것을 살펴보면, 정의 된 PropertyPlaceholderConfigurer 각각은 내부적으로 예상대로 속성을 해석했지만 Spring은 @Value 주석이있는 필드 / params에 값을 삽입하기 위해 Spring을 사용할 수없는 것을 알아낼 수 없습니다.

  2. ==============================

    2.이 문제를 극복하기 위해 다음 중 하나를 수행 할 수 있습니다.

    이 문제를 극복하기 위해 다음 중 하나를 수행 할 수 있습니다.

                     

                  

    나는이 문제에 대해 RnD를 해왔다.

  3. ==============================

    3.@Ophir Radnitz가 말했듯이, 이것은 ApplicationContext에 PropertyPlaceholderConfigurer가 두 개 이상 존재할 때 발생하는 스프링 버그입니다.

    @Ophir Radnitz가 말했듯이, 이것은 ApplicationContext에 PropertyPlaceholderConfigurer가 두 개 이상 존재할 때 발생하는 스프링 버그입니다.

    이 문제를 해결하려면 다음과 같이 원하는 동작을 얻을 수 있습니다.

    (...)
    
    @Autowired
    private Environment environment;
    
    (...)
    
    private Boolean shouldExportData()
    {        
        return environment.getProperty( "custom.data.export", Boolean.class, Boolean.FALSE );
    }
    
  4. from https://stackoverflow.com/questions/28369582/spring-boot-spring-always-assigns-default-value-to-property-despite-of-it-bein by cc-by-sa and MIT license