spring boot 國際化文件外置配置
spring boot 默認(rèn)的國際化配置這里就不說了,主要說下國際化文件外置的一個(gè)配置蹬癌。
需求
messages.properties文件外置并且可以動(dòng)態(tài)改變翻譯文本权她。
分析
spring boot的MessageSourceAutoConfiguration默認(rèn)的加載邏輯:
1. spring.messages.basename 配置國際化文件的名稱,比如默認(rèn)值是messages逝薪,多個(gè)值逗號分隔隅要,那么默認(rèn)從classpath*:messages.properties讀取。
也就是說spring.messages.basename會被默認(rèn)加上頭尾classpath*:[beaname].properties
這個(gè)邏輯在這里
2.MessageSource也是在這個(gè)Configuration里定義了具體類董济。
實(shí)現(xiàn)方法
1. 編譯打包后步清,需要讓resourceBundle文件外置,那么就不能用spring boot的默認(rèn)邏輯,要重寫
return new PathMatchingResourcePatternResolver(classLoader) .getResources("classpath*:" + name + ".properties");
2. ResourceBundleMessageSource要改成ReloadableResourceBundleMessageSource, 支持動(dòng)態(tài)改變文本
步驟
拷貝MessageSourceAutoConfiguration出來廓啊,修改
a. 去掉@ConditionalOnMissingBean(value = MessageSource.class, search = SearchStrategy.CURRENT)
b. 改MessageSource實(shí)現(xiàn)類欢搜,ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
c. 改路徑匹配
部署配置
這樣就可以對resourceBundle文件設(shè)置外部地址了
cacheSeconds是ReloadableResourceBundleMessageSource刷新的間隔時(shí)間,設(shè)太短會影響性能谴轮,生產(chǎn)環(huán)境建議30分鐘以上.
![微信公眾號歡迎關(guān)注.jpg](https://upload-images.jianshu.io/upload_images/6376767-003987c3f2bf2e60.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/258/format/webp)