java ehcache使用_Spring Boot 2.x基础教程:EhCache缓存的使用

上一篇我们学会了如何使用Spring Boot使用进程内缓存在加速数据访问。可能大家会问,那我们在Spring Boot中到底使用了什么缓存呢?

在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:

Generic

JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others)

EhCache 2.x

Hazelcast

Infinispan

Couchbase

Redis

Caffeine

Simple

除了按顺序侦测外,我们也可以通过配置属性spring.cache.type来强制指定。我们也可以通过debug调试查看cacheManager对象的实例来判断当前使用了什么缓存。在上一篇中,我们也展示了如何去查看当前使用情况。

当我们不指定具体其他第三方实现的时候,Spring Boot的Cache模块会使用ConcurrentHashMap来存储。而实际生产使用的时候,因为我们可能需要更多其他特性,往往就会采用其他缓存框架,所以接下来我们会分几篇分别介绍几个常用优秀缓存的整合与使用。

使用EhCache

本篇我们将介绍如何在Spring Boot中使用EhCache进程内缓存。这里我们将沿用上一篇的案例结果来进行改造,以实现EhCache的使用。

先回顾下这个基础案例的三个部分:

User实体的定义

@Entity

@Data

@NoArgsConstructor

public class User {

@Id

@GeneratedValue

private Long id;

private String name;

private Integer age;

public User(String name, Integer age) {

this.name = name;

this.age = age;

}

}

User实体的数据访问实现(涵盖了缓存注解)

@CacheConfig(cacheNames = "users")

public interface UserRepository extends JpaRepository {

@Cacheable

User findByName(String name);

}

测试验证用例(涵盖了CacheManager的注入,可用来观察使用的缓存管理类)

@Slf4j

@RunWith(SpringRunner.class)

@SpringBootTest

public class Chapter51ApplicationTests {

@Autowired

private UserRepository userRepository;

@Autowired

private CacheManager cacheManager;

@Test

public void test() throws Exception {

// 创建1条记录

userRepository.save(new User("AAA", 10));

User u1 = userRepository.findByName("AAA");

System.out.println("第一次查询:" + u1.getAge());

User u2 = userRepository.findByName("AAA");

System.out.println("第二次查询:" + u2.getAge());

}

}

接下来我们通过下面的几步操作,就可以轻松的把上面的缓存应用改成使用ehcache缓存管理。

第一步:在pom.xml中引入ehcache依赖

net.sf.ehcache

ehcache

在Spring Boot的parent管理下,不需要指定具体版本,会自动采用Spring Boot中指定的版本号。

第二步:在src/main/resources目录下创建:ehcache.xml

xsi:noNamespaceSchemaLocation="ehcache.xsd">

maxEntriesLocalHeap="200"

timeToLiveSeconds="600">

完成上面的配置之后,再通过debug模式运行单元测试,观察此时CacheManager已经是EhCacheManager实例,说明EhCache开启成功了。或者在测试用例中加一句CacheManager的输出,比如:

@Autowired

private CacheManager cacheManager;

@Test

public void test() throws Exception {

System.out.println("CacheManager type : " + cacheManager.getClass());

userRepository.save(new User("AAA", 10));

User u1 = userRepository.findByName("AAA");

System.out.println("第一次查询:" + u1.getAge());

User u2 = userRepository.findByName("AAA");

System.out.println("第二次查询:" + u2.getAge());

}

执行测试输出可以得到:

CacheManager type : class org.springframework.cache.ehcache.EhCacheCacheManager

Hibernate: select next_val as id_val from hibernate_sequence for update

Hibernate: update hibernate_sequence set next_val= ? where next_val=?

Hibernate: insert into user (age, name, id) values (?, ?, ?)

2020-07-14 18:09:28.465 INFO 58538 --- [ main] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory

Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_ from user user0_ where user0_.name=?

第一次查询:10

第二次查询:10

可以看到:

第一行输出的CacheManager type为org.springframework.cache.ehcache.EhCacheCacheManager,而不是上一篇中的ConcurrentHashMap了。

第二次查询的时候,没有输出SQL语句,所以是走的缓存获取

整合成功!

代码示例

本文的相关例子可以查看下面仓库中的chapter5-2目录:

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!

本文首发:Spring Boot 2.x基础教程:EhCache缓存的使用,转载请注明出处。

欢迎关注我的公众号:程序猿DD,获得独家整理的学习资源和日常干货推送。

本系列教程点击直达目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值