在使用Spring框架的Web应用程序中解决UI消息并提供内化支持的方式有哪些?Spring国际化支持
我们使用属性文件和ResourceBundleMessageSource来解析Spring中的消息。 Spring的实现会在我们的应用程序中导致高CPU使用率。 ResourceBundleMessageSource实现有两个问题。
- 锁定争用 - getResourceBundle()和getMessageFormat()都是同步的。
- MissingResourceException - 解析消息涉及遍历应用程序中定义的所有资源包并调用bundle.getString(key)。如果未找到密钥,bundle.getString(key)方法调用将引发MissingResourceException。搜索密钥,直到找到给定密钥的消息。由于异常构建是一个缓慢的过程,可能会吃掉CPU(这是我在负载测试中观察到的),这看起来像是一个瓶颈。
尽管上述两个问题(通过扩展类和重写行为)都有解决方法,但我想知道Spring框架中是否还有其他方法为Web应用程序提供国际化支持。
在此先感谢
你说得对。实现一个自定义的MessageSource就是解决这个问题的方法。自定义实现可以在启动时解析预先配置的区域设置的消息。 ReloadableResourceBundleMessageSource不会帮助,因为它不会解决我上面提到的两个问题。 –
我实现了两个MessageSource实现。通过解决方法解决上述两个问题的解决方案,以及解析消息并将其缓存以供将来参考(资源包和消息格式实例未缓存)的另一个实现。以下是第一个实现的外观 - http://amitstechblog.wordpress.com/2012/09/17/issues-with-springs-resourcebundlemessagesource/ –