SpringBoot整合Ehcache

1.在pom.xml文件中添加Ehcache的依赖


		
			org.springframework.boot
			spring-boot-starter-cache
		
		
		
		
			net.sf.ehcache
			ehcache
		

2.创建Ehcache的配置文件
文件名:ehcache.xml
位置:src/main/resources/ehcache.xml

SpringBoot整合Ehcache_第1张图片

  • maxElementsInMemory–允许缓存对象的最大数量
  • eternal–是否做持久化处理
  • timeToIdleSeconds–缓存对象的最长访问时间间隔,如果超过这个时间没有访问就会在缓存中把这个对象删除掉,时间单位为秒

如果不知道该怎么写,可以去ehcache的jar包中有一个样板xml。打开ehcache的jar在最下方
SpringBoot整合Ehcache_第2张图片

除了最上面默认的缓存策略,也可以自己自定义一个缓存策略,把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);
	}

然后再去测试类里测试一下看看结果如何
SpringBoot整合Ehcache_第3张图片
如图所示,虽然运行成功了,一次查询就拿到了两次相同查询的数据不必再去查询一次,但是也爆出了一个异常,这个异常就是如果你要缓存这个对象,那么这个对象就要去实现可序列化接口。
因为缓存是Ehcache是支持磁盘缓存的,是一个磁盘文件的存储所以需要实现可序列化接口
在对象中添加一个可序列化接口

SpringBoot整合Ehcache_第4张图片
这时在运行测试方法就可以看到正常运行没有异常了
SpringBoot整合Ehcache_第5张图片

以上就是Ehcache的简单使用

你可能感兴趣的:(SpringBoot,Ehcache,java,java,SpringBoot,Ehcache)