spring boot: 本地缓存

本文介绍了Spring Boot中本地缓存的应用,包括初始化系统时自动加载错误码到缓存以及实现懒加载和定时刷新的策略。通过监听器SysErrorCodeLoadListener加载缓存,并利用Guava Cache的LoadingCache进行懒加载和定时更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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: 20171222</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: 20171222</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: 20171222</p>

 */

@RestController

@Api(description = "本地缓存服务")

@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 目前项目没用到


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值