spring 使用自定义MessageResource实现数据库动态可配置国际化
最近一个新项目中,要求实现国际化。本来可以用message.properties实现,但是由于涉及到菜单之类,本来就动态配置,所以想是否可以通过spring国际化,自定义实现动态配置。
实现过程
- 自定义MessageResource (其中IMessageResource即数据库动态配置的国际化信息查询服务)
public class AdminMessageResource extends AbstractMessageSource implements ResourceLoaderAware {
@Autowired
private IMessageResource messageResource;
private final Logger log = LoggerFactory.getLogger(getClass());
private static final Map<String, Map<String, String>> LOCAL_CACHE = new ConcurrentHashMap<>(256);
private static final String DEFAULT_RESOURCE_BUND_BASE_NAME = "messages";
private ResourceLoader resourceLoader;
public AdminMessageResource() {
}
@PostConstruct
public void init() {
this.reload();
}
public void reload() {
LOCAL_CACHE.clear();
LOCAL_CACHE.putAll(getAllMessageResource());
}
public Map<String, Map<String, String>> getAllMessageResource() {
List<MessageI18NProperty> messageI18NPropertyList = messageResource.getAllMessageResource();
if (CollectionUtils.isEmpty(messageI18NPropertyList)) {
return MapUtils.EMPTY_MAP;
}
final Map<String, Map<String, String>> messageResources = new HashMap<>();
final Map<String, String> zhCnMessageRes