1.在pom.xml文件中添加Ehcache的依赖
org.springframework.boot
spring-boot-starter-cache
net.sf.ehcache
ehcache
2.创建Ehcache的配置文件
文件名:ehcache.xml
位置:src/main/resources/ehcache.xml
如果不知道该怎么写,可以去ehcache的jar包中有一个样板xml。打开ehcache的jar在最下方
除了最上面默认的缓存策略,也可以自己自定义一个缓存策略,把defaultCache标签改为cache标签然后加一个name属性,方便后面再设置缓存的时候可以根据name来决定使用哪一个缓存策略
3.在application.properties配置文件中加入ehcache的配置
spring-cache-ehcache-config=ehcache.xml
4.修改启动类,在启动类中加入一个@EnableCaching注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
以上就完成了Ehcache的配置,现在让我们去使用一下Ehcache
5.先让我们去创建一个Service接口
public interface UsersService {
List findUserAll();
Users findUserById();
Page findUserByPage(Pageable pageable);
void saveUsers(Users users);
}
6.实现service接口,注意在这个地方使用了JpaRepository接口进行简单实现,其中已经定义好了对数据库操作的方法
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.liuzhe.dao.UsersRepository;
import com.liuzhe.pojo.Users;
import com.liuzhe.service.UsersService;
/**
* UsersService接口实现类
* @author 机械革命
*
*/
@Service
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersRepository usersRepository;
@Override
public List findUserAll() {
// TODO Auto-generated method stub
return this.usersRepository.findAll();
}
@Override
public Users findUserById(Integer id) {
// TODO Auto-generated method stub
return this.usersRepository.findOne(id);
}
@Override
public Page findUserByPage(Pageable pageable) {
// TODO Auto-generated method stub
return this.usersRepository.findAll(pageable);
}
@Override
public void saveUsers(Users users) {
// TODO Auto-generated method stub
this.usersRepository.save(users);
}
}
在src/test/java下编写一个测试类进行测试
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.liuzhe.App;
import com.liuzhe.service.UsersService;
/**
* UsersService测试
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=App.class)
public class UsersServiceTest {
@Autowired
private UsersService usersService;
@Test
public void testFindUserById(){
//第一次查询
System.out.println(this.usersService.findUserById(1));
//第二次查询
System.out.println(this.usersService.findUserById(1));
}
}
这是在没有加入缓存的清空,那么在Service的实现类中你要测试的方法上添加@Cacheabe注解就加入了缓存,如果没有指定缓存策略则运行默认的运行策略
此处以findUserById方法为例
@Override
//加入缓存并指定name为users的缓存策略
@Cacheable(value="users")
public Users findUserById(Integer id) {
return this.usersRepository.findOne(id);
}
然后再去测试类里测试一下看看结果如何
如图所示,虽然运行成功了,一次查询就拿到了两次相同查询的数据不必再去查询一次,但是也爆出了一个异常,这个异常就是如果你要缓存这个对象,那么这个对象就要去实现可序列化接口。
因为缓存是Ehcache是支持磁盘缓存的,是一个磁盘文件的存储所以需要实现可序列化接口
在对象中添加一个可序列化接口
这时在运行测试方法就可以看到正常运行没有异常了
以上就是Ehcache的简单使用