Я новичок в Spring и пытаюсь использовать его класс ReloadableResourceBundleMessageSource.
Я пытаюсь использовать его, чтобы нам больше не приходилось перезапускать наше веб-приложение для изменений / обновлений файлов свойств.
У меня есть веб-приложение (в основном использующее JSF) и отдельный компонент tar, который содержит все мои файлы свойств.
Структура свойств смолы выглядит следующим образом:
- CompanyOneMessages.properties
- CompanyOneMessages_fr_FR.properties
- CompanyTwoMessages.properties
- CompanyTwoMessages_fr_FR.properties
- CompanyThreeMessages.properties
- CompanyThreeMessages_fr_FR.properties
- ...
Этот tar распаковывается и развертывается в местоположении на сервере, которое указано как путь к классам в конфигурациях websphere.
Я добавил следующее в свое applicationContext-config.xml:
<!-- Enable reloading of resource bundles without requiring web-app restart -->
<bean id="messages"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:com/resource/dynamic/CompanyOneMessages</value>
<value>classpath:com/resource/dynamic/CompanyTwoMessages</value>
<value>classpath:com/resource/dynamic/CompanyThreeMessages</value>
</list>
</property>
<property name="cacheSeconds" value="1" />
</bean>
<!-- Declare location of bean to handle messages and define property reference
we will use to reference message properties throughout the presentation layer -->
<bean id="myappMessages" class="com.myapp.resource.MyAPPMessages">
<property name="messages" ref="messages" />
</bean>
Это все отлично работает.
НО, это не полностью решает исходную проблему.
Каждый раз, когда я хочу добавить новую компанию в наше приложение, мне нужно будет добавить новую строку в файл applicationContext-config.xml и повторно развернуть / перезапустить веб-приложение.
Я хотел бы иметь возможность просто перенести новый файл свойств компании в tar свойств и получить его динамическое получение.
Можно ли расширить класс ReloadableResourceBundleMessageSource таким образом, чтобы при запуске приложения он искал путь к классам для файлов свойств и динамически загружал их все?
Обновление
Это то, что я имею до сих пор:
ApplicationContext-config.xml:
<bean id="messages" class="com.resource.MyAPPReloadableResourceBundleMessageSource">
</bean>
MyAPPReloadableResourceBundleMessageSource:
package com.myapp.resource;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
public class MyAPPReloadableResourceBundleMessageSource extends ReloadableResourceBundleMessageSource
{
public MyAPPReloadableResourceBundleMessageSource()
{
getResourceBundlesMessages();
// Simply single basename test
setBasename("classpath:/resource/dynamic/companyOneMessages");
}
@Override
public void setBasename(String baesname)
{
System.out.println("In setBasename");
super.setBasename(baesname);
}
@Override
public void setBasenames(String[] baesnames)
{
System.out.println("In setBasenames");
super.setBasenames(baesnames);
}
private String[] getResourceBundlesMessages()
{
String[] propertiesFiles = null;
// How do I get all filenames with .properties under com.resources.dynamic? (location is under classpath)
return propertiesFiles;
}
}
Итак, все, что мне нужно, это как получить список всех файлов в classpath с расширением .properties?
Спасибо
Thomas