MessageSource不会重新加载属性文件 [英] MessageSource doesn't reload properties file
问题描述
有一个messageSource Bean:
There is a messageSource Bean:
@Bean
public MessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
messageSource.setDefaultEncoding("UTF-8");
messageSource.setBasenames("classpath:/messages/messages");
return messageSource;
}
我读过某个地方,如果我使用ReloadableResourceBundleMessageSource
,则不应缓存messageSource,如果theer是特定的字符串,则每次都要查看属性文件.可悲的是,用这种方式创建的bean是行不通的.编译后如果我添加一些属性,Spring Boot将找不到它.
属性文件位于/resources/messages/messages.properties
和/resources /messages/messages_en.properties
中.
I have read somewhere that If I use ReloadableResourceBundleMessageSource
messageSource shouldn't be cached and everytime look into the properties file if theere is particular string. Sadly with bean created that way It doesn't work. After compiling If I add some properties Spring Boot won't find it.
Properties file is in /resources/messages/messages.properties
and /resources/messages/messages_en.properties
.
推荐答案
尝试此解决方案. 首先:在您的Web配置中配置bean,如下所示.
Try this solution. First: configure the bean in your web configuration as shown below.
@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的类,以暴露其内部类的受保护方法,如下所示.
Second: create a class which extends ReloadableResourceBundleMessageSource to expose the protected method of its inner class as shown below.
public class ReloadableResourceBundleMessageSourceExt extends ReloadableResourceBundleMessageSource {
public Properties getPropertiesByFileName(String fileName){
return super.getProperties(fileName).getProperties();
}
}
第三:现在像这样自动连接bean.
Third: Now Autowired the bean like this.
@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();
}
这篇关于MessageSource不会重新加载属性文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!