1

使用 Spring 框架在 Web 应用程序中解析 UI 消息和提供内部化支持的不同方法有哪些?

我们使用属性文件和 ResourceBundleMessageSource 来解析 Spring 中的消息。Spring 的实现在我们的应用程序中导致了高 CPU 使用率。ResourceBundleMessageSource 实现存在两个问题。

  1. 锁定争用 - getResourceBundle() 和 getMessageFormat() 都是同步的。
  2. MissingResourceException - 解析消息涉及遍历应用程序中定义的所有资源包并调用 bundle.getString(key)。如果未找到密钥,bundle.getString(key) 方法调用将引发 MissingResourceException。搜索密钥,直到找到给定密钥的消息。由于异常构造是一个缓慢的过程,并且可能会占用 CPU(这是我在负载测试中观察到的),这看起来像是一个瓶颈。

尽管上述两个问题都有解决方法(通过扩展类和覆盖行为),但我想知道 Spring 框架中是否还有其他方法可以为 Web 应用程序提供国际化支持。

提前致谢

4

1 回答 1

2

您可以改用ReloadableResourceBundleMessageSource。它提供了一些内部缓存。

如果这不起作用,我建议您实现自己的 MessageSource(这很简单)。Spring 提供了AbstractMessageSource,这可能有助于开始。

从那里,您可以实现一些缓存。很可能,您的本地化没有经常更新。

您可以在此处阅读有关在 Spring 3.1 中使用新的 Cacheable 注释

spring 3.1 @Cacheable 示例

我已经在允许管理员覆盖数据库中的语言环境的应用程序中成功地做到了这一点。但是,您的特定实现显然会非常不同。

于 2012-09-17T14:11:39.387 回答