一个 Apache Tomcat 应用程序服务器,具有 2 个配置的 war 应用程序和一个 MessageSource



我有一个Apache Tomcat应用程序服务器,版本8.5.30,上面配置了2个Web应用程序。

这些应用程序都有Spring Framework 5,每个应用程序都有自己的ReloadableResourceBundleMessageSource,因为我使用消息国际化(i18n(。

当我启动 Apache 并加载其中一个站点时,第一个打开的站点将其消息加载到内存中,而打开时第二个站点没有加载其消息。因此,这会导致第二个应用程序出现异常消息,并引发如下异常:

由: org.springframework.context.NoSuchMessageException : 在区域设置"en_US"的代码"menu.login"下找不到任何消息。

为了尝试解决此问题,我尝试创建两个不同的 MessagesSources,每个应用程序一个,但是在加载应用程序服务器时抛出了另一个异常:

引起: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No 类型 [org.springframework.context.MessageSource] 的限定 bean 是 定义:预期的单个匹配 bean,但找到 2:消息源 A, 消息来源 B.

关于我如何尝试做的一些例子

ROOT.war 中的 AppA(别名 1(

@Bean
public MessageSource messageSourceA() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath*:messageA", "classpath*:enumaratorA");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}

ROOT.war 中的 AppB(别名 2(

@Bean
public MessageSource messageSourceB() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath*:messageB", "classpath*:enumaratorB");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}

拜托,你能帮我解决这个问题吗?
我怎样才能让 Apache/Spring 明白它们是两个不同的来源?
还有什么其他选择?

提前谢谢。

我建议尝试让它工作。

假设属性文件存储在项目的src/main/resources包中。请删除文件后缀.properties,以便messageSource.setBasenames("classpath:messageB", "classpath:enumaratorB");中仅保留messageBenumeratorB,并仔细检查文件路径和拼写。

如果你的属性文件在类路径中,请使用classpath*:否则 Spring 将在应用程序的 Web 目录中查找属性。

相关内容

  • 没有找到相关文章

最新更新