[SPRING] MessageSource가 특성 파일을 다시로드하지 않습니다.
SPRINGMessageSource가 특성 파일을 다시로드하지 않습니다.
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.이 솔루션을 사용해보십시오. 첫 번째 : 아래와 같이 웹 구성에서 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(); }
from https://stackoverflow.com/questions/47126541/messagesource-doesnt-reload-properties-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JoinTable을 사용하여 JPA 자체 조인 (0) | 2019.07.16 |
---|---|
[SPRING] 주어진 도메인 클래스에 대한 스프링 데이터 저장소 인스턴스를 검색하는 방법은 무엇입니까? (0) | 2019.07.16 |
[SPRING] JBoss resteasy - 사용자 지정 Jackson 공급자 (0) | 2019.07.16 |
[SPRING] HTTP 요청의 리턴 상태가 401 일 때 자바에서 응답 본문을 파싱하는 방법 (0) | 2019.07.15 |
[SPRING] RestTemplate을 오프라인으로 사용하여 클래스를 unittest하는 방법은 무엇입니까? (0) | 2019.07.15 |