springBoot简单的ehCache缓存实现

本文简单实现了一个springBoot的ehCache的实现

环境:windows+eclispe+springboot+maven+mybatis
本文是在一个已有的springboot+mybatis项目上实现的。数据库可以自己随便设计一个,使用什么数据库和读取什么数据和这里的缓存没什么关系,所以只记录简单的逻辑代码。

目录:

一、导入依赖包
二、创建实体entity和数据库和mybatis配置
三、添加配置文件
四、创建service类
五、编写测试类

一、导入依赖包

在pom.xml里面添加两个缓存依赖包:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
<dependency>

添加完依赖包后更新maven.

二、创建实体entity和数据库和mybatis配置

这个就不做详细说明了,可以自己定义一个entity,具体字段自己定义,总之可以访问到数据库的数据就行,这一套流程自己写一个。

三、添加配置文件

在src/main/resources下创建一个配置文件cache.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
    <diskStore path="java.io.tmpdir"/>
    <!-- 默认缓存-->
    <defaultCache
            maxElementsInMemory="200"
            eternal="false"
            timeToIdleSeconds="3600"
            timeToLiveSeconds="3600"
            overflowToDisk="true"
            diskPersistent="false"
            memoryStoreEvictionPolicy="LRU"
    />
    <!-- 自定义缓存-->
    <cache name="myCacheName"
           maxElementsInMemory="200"
           eternal="false"
           timeToIdleSeconds="3600"
           timeToLiveSeconds="3600"
           overflowToDisk="true"
           diskPersistent="false"
           memoryStoreEvictionPolicy="LRU">
    </cache>

这个文件会被自动扫描,注意不能修改cache.xml的名称,这个名称是默认的缓存扫描配置文件名称,因为springboot封装了很多配置文件,所有想要使用springBoot默认的扫描路径就不要随便修改配置文件名称。(如果自定义配置文件cache.xml的名称,可以在application.properties里面配置)

四、创建service类

在你的service类里面创建一个方法,用于测试缓存。如下:

@Service
public class PersonService{
    @Cacheable( value="myCacheName")  //这里使用缓存,名称在配置文件定义
    public List<Person> queryAll(){
        System.out.println(111);
        return PersonMapper.queryAll(); // 调用查询数据库的方法,查询你的DB
    }

五、编写测试类

代码如下:

/*下面两个是springBoot单元测试的注解*/
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableCaching  //在启动类里面启用缓存功能
public class Main{
    @Autowired 
    PersonService p;
    @Test
    public void aa(){
        p.queryAll();  //第一次调用,输出111
        p.queryAll();  //第二次调用,使用cache,不输出111
    }
}

注意:测试类里面要直接调用service层使用缓存注解的方法,如果测试类Main里面先调用service层的a()方法,a()方法在调用使用了缓存注解的b()方法,那么这样缓存会失效。如:
在测试类Main里面调用service里面一个a()方法:

public class Main{
    @Autowired 
    PersonService p;
    @Test
    public void aa(){
        p.a();  //第一次调用,输出111
        p.a();  //第二次调用,使用cache,不输出111
    }
}

然后service的类这么写:

@Service
public class PersonService{
    public List<Person> a(){
        return b();
    }
    @Cacheable( value="myCacheName")  //这里使用缓存,名称在配置文件定义
    public List<Person> b(){
        System.out.println(111);
        return PersonMapper.queryAll(); // 调用查询数据库的方法,查询你的DB
}

这样调用最终输出结果会输出两次111,也就是说缓存失效。
上面只是简单的实现了一个使用springBoot缓存的过程,详细的缓存使用可以参考如下网址:springBoot缓存详解

猜你喜欢

转载自blog.csdn.net/qq_23967965/article/details/82658960