miércoles, 10 de diciembre de 2008

Ficheros properties recargables con ReloadableResourceBundleMessageSource

Una sencilla definición con Spring de ficheros de propiedades multidioma, a los que se les puede configurar un tiempo de refresco para que cojan los cambios realizados en caliente. Útil para servidores de producción donde no necesitaríamos reiniciar para cambiar un texto de menus, pantallas, etc.

Definición de los ficheros de mensajes en springMessages.xml:




<!-- Base resource that inyects default properties -->
<bean id="parentResource" class="org.springframework.context.support.
ReloadableResourceBundleMessageSource">
<property name="useCodeAsDefaultMessage" value="true" />
<property name="cacheSeconds" value="1" />
</bean>

<!-- Resources and resource groups -->
<bean id="mainMessages" parent="parentResource">
<property name="basename" value="file:main"/>
</bean>

<bean id="myMessages" parent="parentResource">
<property name="basenames">
<list>
<value>file:myMessages</value>
</list>
</property>
</bean>

<bean id="otherMessages" parent="parentResource">
<property name="basenames">
<list>
<value>file:other1</value>
<value>file:other2</value>
</list>
</property>
</bean>



La clase ReloadableResourceBundleMessageSource permite configurar el tiempo cada cual Spring recargará las properties de los ficheros definidos.
Además permite la agrupación de varios ficheros de mensajes mediante la definición del String[] con los nombres de los mismos (y ruta).

Desde el código Java prodremos acceder a los mismos con:



BeanFactory beanFactory = new ClassPathXmlApplicationContext("/springMessages.xml");
ReloadableResourceBundleMessageSource rms=beanFactory.getBean("myMessages");
String message: rms.getMessage("messageCode", null, "es");




En caso de estar definido el fichero myMessages_es.properties lo obtendria de ahi si no de myMessages.properties

Salud!

No hay comentarios: