Один сервер приложений Apache Tomcat с двумя настроенными военными приложениями и исключением MessageSource - PullRequest
0 голосов
/ 24 мая 2018

У меня есть сервер приложений Apache Tomcat, версия 8.5.30, и на нем настроено 2 веб-приложения.

Эти приложения имеют Spring Framework 5, и у каждого есть свой собственный ReloadableResourceBundleMessageSource, потому что я использую интернационализациюmessages (i18n).

Когда я запускаю Apache и загружаю один из сайтов, первый открытый сайт загружает свои сообщения в память, а второй открываемый сайт не загружает свои сообщения.Таким образом, это вызывает сообщение об исключении во втором приложении и выдает исключение, например:

Причина: org.springframework.context.NoSuchMessageException: не найдено сообщение под кодом 'menu.login' для локали 'en_US'.

Чтобы попытаться решить эту проблему, я попытался создать два разных источника сообщений, по одному для каждого приложения, но при загрузке сервера приложений было выдано другое исключение:

Вызвано: org.springframework.beans.factory.NoUniqueBeanDefinitionException: Не определен квалифицирующий компонент типа [org.springframework.context.MessageSource]: ожидается один соответствующий компонент, но найден 2: messageSourceA, messageSourceB.

Пример того, как я пытался сделать

AppA в ROOT.war (псевдоним 1)

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

AppB в ROOT.war (псевдоним 2)

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

Пожалуйста, не могли бы вы помочь мне решить эту проблему?Как я могу заставить Apache / Spring понять, что это два разных источника?Какие еще варианты можно сделать?

Заранее спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Я бы предложил попробовать, чтобы это сработало.

Предполагается, что файлы свойств хранятся в пакете src/main/resources проекта.Удалите суффикс файла .properties, чтобы в messageSource.setBasenames("classpath:messageB", "classpath:enumaratorB"); оставались только messageB и enumeratorB, и дважды проверьте путь и орфографию файла.

Если ваши файлы свойств находятся в classpath, используйте classpath*:, иначе Spring будет искать свойства в веб-каталоге вашего приложения.

...