복붙노트

[SPRING] MessageSource가 특성 파일을 다시로드하지 않습니다.

SPRING

MessageSource가 특성 파일을 다시로드하지 않습니다.

messageSource Bean이 있습니다.

@Bean
public MessageSource messageSource(){
    ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setBasenames("classpath:/messages/messages");
    return messageSource;
}

내가 어딘가 읽었습니다 ReloadableResourceBundleMessageSource를 사용하면 messageSource가 캐싱되어서는 안되며 theere가 특정 문자열 인 경우 매번 속성 파일을 살펴 봐야합니다. 슬프게도 빈과 함께 그런 식으로 만들었습니다. 작동하지 않습니다. 컴파일 한 후 Spring Boot가 찾을 수없는 속성을 추가합니다. 특성 파일은 /resources/messages/messages.properties 및 /resources/messages/messages_en.properties에 있습니다.

해결법

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

    1.이 솔루션을 사용해보십시오. 첫 번째 : 아래와 같이 웹 구성에서 bean을 구성하십시오.

    이 솔루션을 사용해보십시오. 첫 번째 : 아래와 같이 웹 구성에서 bean을 구성하십시오.

    @Bean
    public MessageSource messageSource () {
        ReloadableResourceBundleMessageSourceExt messageResource =
                new ReloadableResourceBundleMessageSourceExt();
        messageResource.setAlwaysUseMessageFormat(false);
        messageResource.setBasenames("classpath:messages");
        messageResource.setDefaultEncoding(CHARACTER_ENCODING);
        messageResource.setFallbackToSystemLocale(true);
        messageResource.setUseCodeAsDefaultMessage(false);
        messageResource.setCacheSeconds(1); // by default it set to -1 which means cache 
                                            // forever messageSourse.
                                            // set 0 to check reload messeageSource on 
                                            // every getMessageSource request but reload 
                                            // only those files which last modified 
                                            // timestamp is changed.
                                            // value greater than 1 is treated as the 
                                            // time interval between reload.
        return messageResource;
    }
    

    둘째 : ReloadableResourceBundleMessageSource를 확장하여 아래에 표시된 것처럼 내부 클래스의 보호 된 메서드를 노출하는 클래스를 만듭니다.

    public class ReloadableResourceBundleMessageSourceExt extends ReloadableResourceBundleMessageSource {
    
    public Properties getPropertiesByFileName(String fileName){
        return super.getProperties(fileName).getProperties();
    }
    

    }

    셋째 : 이제 이와 같은 빈을 Autowired.

    @Service 
    public class MyMessagesBundleService {
    
    final private String fileName = "classpath:messages";
    
    @Autowired
    ReloadableResourceBundleMessageSourceExt messageSource;
    Properties properties = messageSource.getPropertiesByFileName(this.fileName);
    // now change the properties and saved it.
    // after saved call clear cache and get again.
    messageSource.clearCache();
    
    }
    
  2. from https://stackoverflow.com/questions/47126541/messagesource-doesnt-reload-properties-file by cc-by-sa and MIT license