本文简单实现了一个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缓存详解