文章插图
我们学会了如何使用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 Boot的Cache模块会使用ConcurrentHashMap来存储 。而实际生产使用的时候,因为我们可能需要更多其他特性,往往就会采用其他缓存框架,所以接下来我们会分几篇分别介绍几个常用优秀缓存的整合与使用 。
使用EhCache本篇我们将介绍如何在Spring Boot中使用EhCache进程内缓存 。这里我们将沿用上一篇的案例结果来进行改造,以实现EhCache的使用 。
先回顾下这个基础案例的三个部分:
User实体的定义
@Entity@Data@NoArgsConstructorpublic 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<User, Long> { @Cacheable User findByName(String name);}
测试验证用例(涵盖了CacheManager的注入,可用来观察使用的缓存管理类)@Slf4j@RunWith(SpringRunner.class)@SpringBootTestpublic 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依赖
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId></dependency>
在Spring Boot的parent管理下,不需要指定具体版本,会自动采用Spring Boot中指定的版本号 。第二步:在src/main/resources目录下创建:ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> <cache name="users" maxEntriesLocalHeap="200" timeToLiveSeconds="600"> </cache></ehcache>
完成上面的配置之后,再通过debug模式运行单元测试,观察此时CacheManager已经是EhCacheManager实例,说明EhCache开启成功了 。或者在测试用例中加一句CacheManager的输出,比如:【Spring Boot 2.x基础教程:EhCache缓存的使用】
推荐阅读
- SpringBoot下使用定时任务的方式全揭秘
- 为什么Java程序员必须要会SpringBoot?
- Spring Boot读取配置文件的几种方式「值得收藏」
- Tomcat爆出安全漏洞!Spring Cloud/Boot框架多个版本受影响
- Springboot 动态改变Log级别
- 可以秒杀全场的SpringCloud微服务电商实战项目,文档贼全
- 聊聊Spring boot2.X开发环境搭建和基本开发
- 扒一扒Spring家族的前世今生
- 一文搞懂 Spring JPA
- 一 当用SpringApplication.run的时候发生了什么