1. 场景:初始化系统,自动加载错误码到本地缓存
1. 缓存类(tcloud-common-api/ SysErrorCodeMappingCache)
package com.svw.tbox.tcloud.commons.cache;
import java.util.ArrayList; import java.util.List; import com.svw.tbox.tcloud.commons.api.entity.SysErrorCodeMapping;
/** * @Title<p>ClassName: SysErrorCodeMappingCache</p> * @Description<p>Description: 错误码缓存类</p> * @Author<p>Author: 胡锐锋</p> * @Date<p>Date: 2017年12月22日</p> */ publicclass SysErrorCodeMappingCache {
private SysErrorCodeMappingCache() { super(); }
privatestatic List<SysErrorCodeMapping> sysErrorCodeMappings = new ArrayList<>();
publicstatic List<SysErrorCodeMapping> getSysErrorCodeMappings() { returnsysErrorCodeMappings; }
publicstaticvoid setSysErrorCodeMappings(List<SysErrorCodeMapping> sysErrorCodeMappings) { SysErrorCodeMappingCache.sysErrorCodeMappings = sysErrorCodeMappings; } } |
2. 监听器(tcloud-mds/ SysErrorCodeLoadListener)
package com.svw.tbox.tcloud.mds.listener;
import java.util.List; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import org.springframework.beans.factory.annotation.Autowired; import com.svw.tbox.tcloud.commons.api.entity.SysErrorCodeMapping; import com.svw.tbox.tcloud.commons.cache.SysErrorCodeMappingCache; import com.svw.tbox.tcloud.mds.feign.SysErrorCodeMappingFeign;
/** * @Title<p>ClassName: SysErrorCodeLoadListener</p> * @Description<p>Description: 错误码缓存实现</p> * @Author<p>Author: 胡锐锋</p> * @Date<p>Date: 2017年12月22日</p> */ @WebListener publicclass SysErrorCodeLoadListener implements ServletContextListener { @Autowired private SysErrorCodeMappingFeign sysErrorCodeMappingFeign;
@SuppressWarnings("unchecked") @Override publicvoid contextInitialized(ServletContextEvent sce) { // 加载redis中的缓存错误码 List<SysErrorCodeMapping> sysErrorCodeMappings = (List<SysErrorCodeMapping>) sysErrorCodeMappingFeign.queryAll() .getData(); SysErrorCodeMappingCache.setSysErrorCodeMappings(sysErrorCodeMappings); }
@Override publicvoid contextDestroyed(ServletContextEvent sce) { // 监听销毁时执行 } } |
3. 开启监听器扫描
@SpringBootApplication @EnableHystrix @EnableDiscoveryClient @EnableFeignClients @MapperScan(basePackages = "com.svw.tbox.tcloud.mds.dao") @ServletComponentScan publicclass MdsApplication {…… |
4. 刷新缓存设置
package com.svw.tbox.tcloud.mds.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;
import com.svw.tbox.tcloud.commons.api.entity.SysErrorCodeMapping; import com.svw.tbox.tcloud.commons.cache.SysErrorCodeMappingCache; import com.svw.tbox.tcloud.commons.web.Result; import com.svw.tbox.tcloud.commons.web.SystemResponse; import com.svw.tbox.tcloud.mds.feign.SysErrorCodeMappingFeign;
import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation;
/** * @Title<p>ClassName: SysErrorCodeMappingController</p> * @Description<p>Description: 本地缓存操作类</p> * @Author<p>Author: 胡锐锋</p> * @Date<p>Date: 2017年12月22日</p> */ @RestController @Api( @RequestMapping("/localCache") publicclass LocalCacheController { @Autowired private SysErrorCodeMappingFeign sysErrorCodeMappingFeign;
@SuppressWarnings("unchecked") @ApiOperation(value = "刷新错误码本地缓存") @RequestMapping(value = "/refreshSysErrorCodeMapping", method = RequestMethod.GET) public SystemResponse refreshSysErrorCodeMapping() { SysErrorCodeMappingCache.clear(); List<SysErrorCodeMapping> sysErrorCodeMappingList = (List<SysErrorCodeMapping>) sysErrorCodeMappingFeign .queryAll().getData(); SysErrorCodeMappingCache.setSysErrorCodeMappings(sysErrorCodeMappingList); return Result.success(sysErrorCodeMappingList); } } |
2. 场景:懒加载,小缓存,定时刷新
使用GuavaCache
1. 添加依赖
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> |
2. 使用LoadingCache
//TODO 目前项目没用到