189 8069 5689

SpringBoot下EhCache缓存的使用

本篇内容主要讲解“Spring Boot下EhCache缓存的使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Boot下EhCache缓存的使用”吧!

成都创新互联专注于资源企业网站建设,响应式网站设计,商城网站定制开发。资源网站建设公司,为资源等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

使用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中指定的版本号。

Spring Boot下EhCache缓存的使用

第二步:在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

可以看到:

  1. 第一行输出的CacheManager type为org.springframework.cache.ehcache.EhCacheCacheManager,而不是之前讲的ConcurrentHashMap了。

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

整合成功!

到此,相信大家对“Spring Boot下EhCache缓存的使用”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章标题:SpringBoot下EhCache缓存的使用
网站URL:http://cdxtjz.com/article/jhcoej.html

其他资讯