2016-08-10 4 views
1

우리는 Spring을 사용하고 PropertySourcesPlaceholderConfigurer을 사용하여 속성을 연결합니다. 현재 setIgnoreUnresolvablePlaceholderstrue으로 설정하여 속성이없는 경우 앱을 계속 사용할 수 있습니다.누락 된 스프링 속성에 대해 경고합니다.

그냥 응용 프로그램을 중단하는 것이 더 좋을 것이라고 생각하지만, 지금은 위험 할 수 있으므로 중간 해결책을 원합니다. 누락 된 속성에 대해 경고하십시오.

속성이 누락되었다는 경고 또는 오류 수준의 로그 메시지를 보내고 싶지만 앱을 계속 시작하려면 최선의 노력을 기울여야합니다.

스프링 4 및 Java 8에서 가능합니까? PropertySourcesPlaceHolderConfigurer의 소스에서

+0

어쩌면

String resolved = (ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal)); if(strVal.equals(resolved)) { LOG.warn("Property "+ strVal+ " could not be found"); 

하지 쉬운 솔루션

을 ...된다 .. 그런 식으로 우리의 명확한 그림이 니가 말하는거야 – Sohlowmawn

답변

2

봐, 특히 processProperties 방법 :

protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, 
     final ConfigurablePropertyResolver propertyResolver) throws BeansException { 

    propertyResolver.setPlaceholderPrefix(this.placeholderPrefix); 
    propertyResolver.setPlaceholderSuffix(this.placeholderSuffix); 
    propertyResolver.setValueSeparator(this.valueSeparator); 

    StringValueResolver valueResolver = new StringValueResolver() { 
     @Override 
     public String resolveStringValue(String strVal) { 
      String resolved = (ignoreUnresolvablePlaceholders ? 
        propertyResolver.resolvePlaceholders(strVal) : 
        propertyResolver.resolveRequiredPlaceholders(strVal)); 
      if (trimValues) { 
       resolved = resolved.trim(); 
      } 
      return (resolved.equals(nullValue) ? null : resolved); 
     } 
    }; 

    doProcessProperties(beanFactoryToProcess, valueResolver); 
} 

당신은 그것을 간단한 검사가 포함되어있는 것을 확인할 수 있습니다.
으로 보호됩니다.
그런 다음 솔루션은 메서드를 재정의하는 고유 한 PropertySourcesPlaceHolderConfigurer 하위 클래스를 만드는 것입니다. 정확히 동일한 코드가 포함되어 있지만 경고가 기록됩니다.

그래서

String resolved = (ignoreUnresolvablePlaceholders ? 
     propertyResolver.resolvePlaceholders(strVal) : 
     propertyResolver.resolveRequiredPlaceholders(strVal)); 

그런 다음 몇 가지 코드를 공유하는 것이 좋을 것이다

+0

고맙다. 스프링 프레임 워크에 의해 많은 문자열 (주로 패키지 이름, 빈 문자열 등)이 해결되었으므로이를 필터링해야했습니다. 스프링 속성 자리 표시 자에 대한 정규식 검사를 추가했습니다. –

관련 문제