前面的章节,解说了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache、RedisCache、ConcurrentMapCache等。
这一节我们来看看Spring Cache使用EhCache。
一、EhCache使用演示
EhCache是一个纯Java的历程内缓存框架,具有快速、精悍等特点,Hibernate中的默认Cache就是使用的EhCache。
本章节示例是在Spring Boot集成Spring Cache的源码底子上举行改造。源码地址:https://github.com/imyanger/springboot-project/tree/master/p20-springboot-cache
使用EhCache作为缓存,我们先引入相干依靠。 - <code><dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <!--ehcache依靠-->
- <dependency>
- <groupId>net.sf.ehcache</groupId>
- <artifactId>ehcache</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-cache</artifactId>
- </dependency></code>
复制代码然后创建EhCache的配置文件ehcache.xml。 - <code><?xml version="1.0" encoding="UTF-8"?>
- <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
- updateCheck="false">
- <!--
- 磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的假造内存
- path:指定在硬盘上存储对象的路径
- path可以配置的目录有:
- user.home(用户的家目录)
- user.dir(用户当前的工作目录)
- java.io.tmpdir(默认的暂时目录)
- ehcache.disk.store.dir(ehcache的配置目录)
- 绝对路径(如:d:\\ehcache)
- 检察路径方法:String tmpDir = System.getProperty("java.io.tmpdir");
- -->
- <diskStore path="java.io.tmpdir" />
- <!--
- defaultCache:默认的缓存配置信息,假如不加特殊阐明,则所有对象按照此配置项处置惩罚
- maxElementsInMemory:设置了缓存的上限,最多存储多少个纪录对象
- eternal:代表对象是否永不外期 (指定true则下面两项配置需为0无限期)
- timeToIdleSeconds:最大的发呆时间 /秒
- timeToLiveSeconds:最大的存活时间 /秒
- overflowToDisk:是否答应对象被写入到磁盘
- 阐明:下列配置自缓存建立起600秒(10分钟)有效 。
- 在有效的600秒(10分钟)内,假如连续120秒(2分钟)未访问缓存,则缓存失效。
- 就算有访问,也只会存活600秒。
- -->
- <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600"
- timeToLiveSeconds="600" overflowToDisk="true" />
- <cache name="cache" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120"
- timeToLiveSeconds="600" overflowToDisk="true" />
- </ehcache></code>
复制代码然后SpringBoot配置文件中,指明缓存类型并声明Ehcache配置文件的位置。 - <code>server:
- port: 10900
- spring:
- profiles:
- active: dev
- cache:
- type: ehcache
- ehcache:
- config: classpath:/ehcache.xml</code>
复制代码这样就可以开始使用Ehcache了,测试代码与Spring Boot集成Spring Cache同等。
SpringBoot启动类,@EnableCaching开启Spring Cache缓存功能。 - <code>@EnableCaching
- @SpringBootApplication
- public class SpringbootApplication {
- public static void main(String[] args) {
- String tmpDir = System.getProperty("java.io.tmpdir");
- System.out.println("暂时路径:" + tmpDir);
- SpringApplication.run(SpringbootApplication.class, args);
- }
- }</code>
复制代码CacheApi接口调用类,方便调用举行测试。 - <code>@RestController
- @RequestMapping("cache")
- public class CacheApi {
- @Autowired
- private CacheService cacheService;
- @GetMapping("get")
- public User get(@RequestParam int id){
- return cacheService.get(id);
- }
- @PostMapping("set")
- public User set(@RequestParam int id, @RequestParam String code, @RequestParam String name){
- User u = new User(code, name);
- return cacheService.set(id, u);
- }
- @DeleteMapping("del")
- public void del(@RequestParam int id){
- cacheService.del(id);
- }
-
- }</code>
复制代码CacheService缓存业务处置惩罚类,添加缓存,更新缓存和删除。 - <code>@Slf4j
- @Service
- public class CacheService {
- private Map<Integer, User> dataMap = new HashMap <Integer, User>(){
- {
- for (int i = 1; i < 100 ; i++) {
- User u = new User("code" + i, "name" + i);
- put(i, u);
- }
- }
- };
- // 获取数据
- @Cacheable(value = "cache", key = "'user:' + #id")
- public User get(int id){
- log.info("通过id{}查询获取", id);
- return dataMap.get(id);
- }
- // 更新数据
- @CachePut(value = "cache", key = "'user:' + #id")
- public User set(int id, User u){
- log.info("更新id{}数据", id);
- dataMap.put(id, u);
- return u;
- }
- //删除数据
- @CacheEvict(value = "cache", key = "'user:' + #id")
- public void del(int id){
- log.info("删除id{}数据", id);
- dataMap.remove(id);
- }
-
- }</code>
复制代码源码地址:https://github.com/imyanger/springboot-project/tree/master/p22-springboot-cache-ehcache
来源:https://www.cnblogs.com/imyanger/p/11729480.html |