MessageSource不会重新加载属性文件 [英] MessageSource doesn't reload properties file

查看:412
本文介绍了MessageSource不会重新加载属性文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆