SpringBoot整合Ehcache

本文介绍如何在Spring Boot项目中集成Ehcache缓存组件,包括配置步骤、使用方法及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的简单使用

### 整合 Ehcache 到 Spring Boot 项目的指南 #### 添加必要的依赖项 为了使 Spring Boot 支持 Ehcache 缓存,`spring-boot-starter-cache` 和 `ehcache` 的 Maven/Gradle 依赖是必不可少的。前者提供了一个抽象层用于管理各种类型的缓存机制;后者作为具体的缓存解决方案被引入。 对于Maven项目而言,应在pom.xml中加入以下片段: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency> ``` 而对于 Gradle 用户,则需在 build.gradle 文件内添加相应条目[^1]。 #### 配置 Application 属性文件 创建或编辑现有的application.yml (或 .properties),定义所需的缓存名称以及指向自定义配置文件的位置(如果有的话)。下面是一个简单的YAML格式的例子: ```yaml spring: cache: type: ehcache cache-names: cache1, cache2 ehcache: config: classpath:ehcache.xml ``` 这段设置指定了两个名为 "cache1" 和 "cache2" 的缓存实例,并告知应用程序去类路径下寻找名为 `ehcache.xml` 的具体配置文档。 如果没有特别指定 `spring.cache.ehcache.config` 参数,默认情况下将会尝试加载位于classpath根目录下的 `ehcache.xml` 文件来进行初始化操作[^2]。 #### 定义 Ehcache XML 配置 最后一步是在资源目录(src/main/resources/)里放置一个合适的 `ehcache.xml` 文件,它包含了关于各个缓存区域的具体参数设定,比如最大容量、过期策略等特性。这里给出一段基础模板供参考: ```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"> <!-- 默认缓存 --> <defaultCache maxEntriesLocalHeap="1000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120"/> <!-- 自定义缓存区 'cache1' --> <cache name="cache1" maxEntriesLocalHeap="500" eternal="true"/> <!-- 另外一个自定义缓存区 'cache2' --> <cache name="cache2" maxEntriesLocalHeap="700" timeToIdleSeconds="300" /> </ehcache> ``` 上述XML片断展示了如何为不同的命名空间(`cache1`, `cache2`)定制化各自的存储行为和生命周期属性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值