springboot 使用guavacache+ 加自定义注解,打成starter

225 阅读2分钟

1,guavacache 是谷歌优秀的一个本地缓存的jar包。一般不想使用redis 的时候,用本地缓存来替代。比较灵活,我们项目中也在使用。这个时候 我看他们写的不够优雅,我在想能不能使用注解+自定义结果处理来实现,并构建成starter. 由于guavacache使用比较简单,这里就不列举具体的使用了。

2.这里我们先写一个自定义的注解

里面有四个属性,这些属性可以自己添加的。 name 就是缓存的名字,这个名字不可以重复的。 expireTime 缓存的保留有效时间,一定要设置。 timeUnit 保留时间单位 concurrencyLevel 并发级别,支持多少个线程同时访问。 3, 再写一个自定义的结果处理器

要实现 HandlerMethodReturnValueHandler 重写他的两个方法。

第一个方法判是否存在,切记这个注解不能同时和@RestController 同时存在。因为@RestController 包括@ResponseBody,他的优先级会比你自定义的注解高。 用的话使用@Controller . 重点,重点。 这里了concurrentMap, key 就是注解的name, value 就是这个缓存对象。 是final 修饰 不可变的。

下面方法内容就比较简单了

  1. 如果没有就开始构建,也就是初始化加入缓存,初始化 key 和value 。
  2. 要是缓存还没有失效,就从缓存里面取 key 存在,value 没有失效。
  3. 要是缓存失效,那就再一次的重新塞入这个map 里面,key 是存在的。

这里注意一点,response流一定要关闭。 还有一个坑就是转义和字符“” 的问题

最后在加入webMvcCinfigurer 里面

4 ,下面我们来测试一下,编写测试的方法

我们先启动服务,测试getcat url . 第一次请求 看日志

结果
过了一分钟以后

在请求一次

验证成功,在测试/test url 看结果,看日志

看的不太清晰,我们把它打印出来

在重启试一下,第一次开始

验证成功。 就是这么简单。 这样使用其实就是花头,炫技的。我这里只是提供一些思路。 多看看spring源码,会有收获的。如果你认同,别忘记点赞啊。 相关的starter maven 中央仓库在审核,审核完成了,我在放出github链接。