SpringBoot整合Ehcache

5 篇文章 0 订阅
1 篇文章 0 订阅

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

<!--SpringBoot缓存支持启动器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-cache</artifactId>
		</dependency>
		
		<!-- Ehcache坐标 -->
		<dependency>
			<groupId>net.sf.ehcache</groupId>
			<artifactId>ehcache</artifactId>
		</dependency>

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

在这里插入图片描述

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

如果不知道该怎么写,可以去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<Users> findUserAll();
	Users findUserById();
	Page<Users> 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<Users> 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<Users> 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的简单使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值