Terminé creando una clase llamada DatabaseMessageSource incluida a continuación. Todavía tengo que implementar algún tipo de almacenamiento en caché, así que no golpeo la base de datos con cada llamada. Este link también fue útil. Gracias skaffman y PrimosK por apuntarme en la dirección correcta.
public class DatabaseMessageSource extends ReloadableResourceBundleMessageSource {
@Autowired
private MyDao myDao;
protected MessageFormat resolveCode(String code, Locale locale) {
MyObj myObj = myDao.findByCode(code);
MessageFormat format;
if (myObj!= null && myObj.getId() != null) {
format = new MessageFormat(myObj.getValue(), locale);
} else {
format = super.resolveCode(code, locale);
}
return format;
}
protected String resolveCodeWithoutArguments(String code, Locale locale) {
MyObj myObj = myDao.findByCode(code);
String format;
if (myObj != null && myObj.getId() != null) {
format = myObj.getValue();
} else {
format = super.resolveCodeWithoutArguments(code, locale);
}
return format;
}
}
Actualicé mi applicationContext para apuntar a la clase recién creada. lo cambié a:
<bean id="messageSource" class="com.mycompany.mypackage.DatabaseMessageSource">
<property name="basenames">
<list>
<value>classpath:defaultMessages</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
</bean>`enter code here`
Para el almacenamiento en caché que sugeriría Ehcache ... Tome un vistazo a [esta] (http://ehcache.org/documentation/recipes/thunderingherd) y [esto] (http: //ehcache.org/documentation/recipes/spring-annotations) .... – PrimosK
Gracias por esto. Implementaré el primer enlace. Has sido realmente útil. Gracias de nuevo – blong824
Una pregunta de seguimiento. ¿Cómo puedo pasar un objeto del controlador a mi clase DatabaseMessageSource? El objeto está en sesión cuando se carga la pantalla con el resorte: etiquetas de mensaje. – blong824