spring boot 国际化文件外置配置
spring boot 国际化文件外置配置
spring boot 默认的国际化配置这里就不说了,主要说下国际化文件外置的一个配置。
需求
messages.properties文件外置并且可以动态改变翻译文本。
分析
spring boot的MessageSourceAutoConfiguration默认的加载逻辑:
1. spring.messages.basename 配置国际化文件的名称,比如默认值是messages,多个值逗号分隔,那么默认从classpath*:messages.properties读取。
也就是说spring.messages.basename会被默认加上头尾classpath*:[beaname].properties
这个逻辑在这里
2.MessageSource也是在这个Configuration里定义了具体类。
实现方法
1. 编译打包后,需要让resourceBundle文件外置,那么就不能用spring boot的默认逻辑,要重写
return new PathMatchingResourcePatternResolver(classLoader) .getResources("classpath*:" + name + ".properties");
2. ResourceBundleMessageSource要改成ReloadableResourceBundleMessageSource, 支持动态改变文本
步骤
拷贝MessageSourceAutoConfiguration出来,修改
a. 去掉@ConditionalOnMissingBean(value = MessageSource.class, search = SearchStrategy.CURRENT)
b. 改MessageSource实现类,ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
c. 改路径匹配
部署配置
这样就可以对resourceBundle文件设置外部地址了
cacheSeconds是ReloadableResourceBundleMessageSource刷新的间隔时间,设太短会影响性能,生产环境建议30分钟以上.