Java 如何有效地为来自数据库的i18n消息提供服务

Java 如何有效地为来自数据库的i18n消息提供服务,java,hibernate,spring,orm,internationalization,Java,Hibernate,Spring,Orm,Internationalization,我正在使用最新版本的Spring框架和Hibernate。我知道如何创建自定义版本的MessageSource。但什么是提供i18n消息的最佳方式呢。因为若每次应用程序需要国际化时我都查询数据库,这将给数据库带来巨大的流量,而且查询通常只会返回相同查询的相同答案 我想听听实施这个的好方法?这是将所有消息存储到内存中的好方法还是有效地为消息提供服务的最佳方法?如果您只谈论静态消息,那么将所有消息存储到内存中看起来是可以接受的。对于一个高级解决方案,您可以考虑使用像EHCache这样的缓存框架,它与

我正在使用最新版本的Spring框架和Hibernate。我知道如何创建自定义版本的MessageSource。但什么是提供i18n消息的最佳方式呢。因为若每次应用程序需要国际化时我都查询数据库,这将给数据库带来巨大的流量,而且查询通常只会返回相同查询的相同答案


我想听听实施这个的好方法?这是将所有消息存储到内存中的好方法还是有效地为消息提供服务的最佳方法?

如果您只谈论静态消息,那么将所有消息存储到内存中看起来是可以接受的。对于一个高级解决方案,您可以考虑使用像EHCache这样的缓存框架,它与Spring集成得很好,但是根据您想要缓存的数据量和在特定条件下清除它的必要性可能会被过度使用。将它们全部存储到内存中看起来是可以接受的。对于高级解决方案,您可以考虑使用像EHCache这样的缓存框架,它与Spring集成得很好,但这可能是由于您想要缓存的数据量和在特定条件下清除它的必要性。 因为若每次应用程序需要国际化时我都查询数据库,这将给数据库带来巨大的流量,而且查询通常只会返回相同查询的相同答案

考虑使用二级缓存和查询缓存。表示i18n消息的实体似乎是缓存的好候选对象。看看

  • 加文·金建议
因为若每次应用程序需要国际化时我都查询数据库,这将给数据库带来巨大的流量,而且查询通常只会返回相同查询的相同答案

考虑使用二级缓存和查询缓存。表示i18n消息的实体似乎是缓存的好候选对象。看看

  • 加文·金建议

您不想使用ResourceBundles有什么原因吗?已有一个已实现的ResourceBundleMessageSource。如果将其移动到数据库中,当您要添加新语言时会发生什么?是否添加一组新列?数据库表包含id、键、值和语言列。查询包含键和语言。所以,您可以随时将i18n支持的任何语言添加到数据库中……您不想使用ResourceBundles有什么原因吗?已有一个已实现的ResourceBundleMessageSource。如果将其移动到数据库中,当您要添加新语言时会发生什么?是否添加一组新列?数据库表包含id、键、值和语言列。查询包含键和语言。所以您可以随时将i18n支持的任何语言添加到数据库中。。。