Guava之controller中使用缓存cache

来源:互联网 发布:怎样用dos运行java文件 编辑:程序博客网 时间:2024/05/17 07:36

之前介绍过的Guava这个工具包中有很多方便的用法,下面要使用它封装的Cache来实现功能.

示例:

import com.google.common.cache.CacheBuilder;import com.google.common.cache.CacheLoader;import com.google.common.cache.LoadingCache;import org.joda.time.DateTime;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;import java.util.concurrent.TimeUnit;@RestController@RequestMapping("/hello")public class HelloController {private static Logger logger = LoggerFactory.getLogger(HelloController .class);public static LoadingCache<String,Object> cacheBuilder;@Autowiredprivate OverviewService overviewService;static OverviewParameter op ;@RequestMapping(value="/hh",method=RequestMethod.GET)public Result<?> sayHello(OverviewParameter overviewParameter){Result<?> result = null;setOviewParameter(overviewParameter);ObjectResultEx<SummaryVo> resObj  = (ObjectResultEx<SummaryVo>) getDataInCache("summary", overviewParameter);...return result;}/** * 根据键值获取缓存中的数据 */private Object getDataInCache(final String key, OverviewParameter overviewParameter){logger.info("before refresh cache, key:{}, param:{}",key, JSONObject.toJSONString(overviewParameter));op = overviewParameter;try {if ((cacheBuilder != null) && ((ObjectResultEx) cacheBuilder.get(key)).isSuccess()){return cacheBuilder.get(key);                        }else {return commonCache(new CacheLoader<String, Object>() {@Overridepublic Object load(String key) throws Exception {logger.info("refresh cache, key:{}, param:{}",key, JSONObject.toJSONString(op));switch (key){case "summary":return overviewService.overviewSummary(op);case "grantNums":return overviewService.overviewGrantNums(op);case "creditNums":return overviewService.overviewCreditNums(op);case "riskNums":return overviewService.overviewRiskNums(op);default:return new ObjectResultEx<>().makeFailedResult();}}}).get(key);}} catch (Exception e) {logger.error("获取缓存中的数据出错", e);}return new ObjectResultEx<>().makeFailedResult();}/** * 为缓存设置loader */private LoadingCache<String, Object> commonCache(CacheLoader<String, Object> loader) {synchronized (logger){cacheBuilder =  CacheBuilder.newBuilder().refreshAfterWrite(1, TimeUnit.MINUTES).build(loader);}return cacheBuilder;}}

 

原创粉丝点击