缓存(Cache)
集成缓存模块
WebMVC模块已集成缓存模块,通过@Cacheable注解即可轻松实现控制器方法的缓存,通过配置缓存模块的scope_processor_class参数可以支持APPLICATION和SESSION作用域;
# 设置缓存作用域处理器 ymp.configs.cache.scope_processor_class=net.ymate.platform.webmvc.support.WebCacheScopeProcessor
示例代码:将方法执行结果以会话(SESSION)级别缓存180秒;
@Controller @RequestMapping("/demo") @Cacheable public class CacheController { @RequestMapping("/cache") @Cacheable(scope = ICaches.Scope.SESSION, timeout = 180) public IView doCacheable(@RequestParam String content) throws Exception { // ...... return View.textView("Content: " + content); } }
注意:基于@Cacheable的方法缓存只是缓存控制器方法返回的结果对象,并不能缓存IView视图的最终执行结果;
自定义缓存处理器
WebMVC模块提供了缓存处理器IWebCacheProcessor接口,可以让开发者通过此接口对控制器执行结果进行最终处理,该接口作用于被声明@ResponseCache注解的控制器类和方法上;
说明: 框架提供IWebCacheProcessor接口默认实现
net.ymate.platform.webmvc.support.WebCacheProcessor
用以缓存视图执行结果,
但需要注意的是当使用它时, 请检查web.xml的过滤器DispatchFilter
中不要配置<dispatcher>INCLUDE</dispatcher>
,否则将会产生死循环;
@ResponseCache注解参数说明:
cacheName:缓存名称, 可选参数, 默认值为default;
key:缓存Key, 可选参数, 若未设置则由IWebCacheProcessor接口实现自动生成;
processorClass:自定义视图缓存处理器, 可选参数,若未提供则采用默认IWebCacheProcessor接口参数配置;
scope:缓存作用域, 可选参数,可选值为APPLICATION、SESSION和DEFAULT,默认为DEFAULT;
timeout:缓存数据超时时间, 可选参数,数值必须大于等于0,为0表示默认缓存300秒;
useGZip:是否使用GZIP压缩, 默认值为true
默认IWebCacheProcessor接口参数配置:
# 缓存处理器,可选参数 ymp.configs.webmvc.cache_processor_class=demo.WebCacheProc
框架默认提供了该接口的实现类:
net.ymate.platform.webmvc.support.WebCacheProcessor
- 基于Cache缓存模块使其对@ResponseCache注解中的Scope.DEFAULT作用域支持Last-Modified等浏览器相关配置,并支持GZIP压缩等特性
示例代码:
package demo; import net.ymate.platform.webmvc.*; import net.ymate.platform.webmvc.view.IView; public class WebCacheProc implements IWebCacheProcessor { public boolean processResponseCache(IWebMvc owner, ResponseCache responseCache, IRequestContext requestContext, IView resultView) throws Exception { // 这里是对View视图自定义处理逻辑... // 完整的示例代码请查看net.ymate.platform.webmvc.support.WebCacheProcessor类源码 return false; } } @Controller @RequestMapping("/demo") public class CacheController { @RequestMapping("/cache") @ResponseCache public IView doCacheable(@RequestParam String content) throws Exception { // ...... return View.textView("Content: " + content); } }
说明:该接口方法返回布尔值,用于通知WebMVC框架是否继续处理控制器视图;