Por qué los convertidores de mensajes de Spring aún se invocan en los métodos @Cachable
Frecuentes
Visto 334 veces
3
digamos que tengo dos métodos en mi controlador para admitir json y xml.
@RequestMapping(value = "/get/response.json", method = RequestMethod.GET)
@Cacheable(JSON_CACHE)
public @ResponseBody JSONResponse getJsonResponse(){
return responseService.getJsonResponse();
}
@RequestMapping(value = "/get/response.xml", method = RequestMethod.GET)
@Cacheable(XML_CACHE)
public @ResponseBody XMLResponse getXmlResponse(){
return responseService.getXmlResponse();
}
Y dos convertidores de mensajes, organizando mis objetos en una respuesta adecuada.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter"/>
<ref bean="xmlConverter" />
</list>
</property>
</bean>
El problema es que Spring 3.1, aunque el método está anotado con @Cachable
, aún invoca a marshaller para cada llamada. Almacena en caché el estado del objeto antes de ordenarlo. Esto no es aceptable porque el rendimiento es crucial aquí y la clasificación es demasiado costosa para mí. Esperaba que Spring almacenara en caché la respuesta final en tal caso. ¿Estoy haciendo algo mal aquí?
1 Respuestas
1
Para evitar este problema, se puede usar el almacenamiento en caché web ehcache: http://www.ehcache.org/documentation/user-guide/web-caching
Funciona simplemente agregando un filtro a web.xml y proporciona el almacenamiento en caché de las respuestas HTTP.
<filter>
<filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimpleCachingHeadersPageCachingFilter
</filter-class>
<init-param>
<param-name>suppressStackTrace</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cacheName</param-name>
<param-value>CachedPage2Cache</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Respondido el 15 de junio de 12 a las 18:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas spring caching optimization or haz tu propia pregunta.