上一篇咱們學會了如何使用Spring Boot使用進程內緩存在加速數據訪問。可能你們會問,那咱們在Spring Boot中到底使用了什麼緩存呢?java
在Spring Boot中經過@EnableCaching
註解自動化配置合適的緩存管理器(CacheManager),Spring Boot根據下面的順序去偵測緩存提供者:git
除了按順序偵測外,咱們也能夠經過配置屬性spring.cache.type來強制指定。咱們也能夠經過debug調試查看cacheManager
對象的實例來判斷當前使用了什麼緩存。在上一篇中,咱們也展現瞭如何去查看當前使用狀況。github
當咱們不指定具體其餘第三方實現的時候,Spring Boot的Cache模塊會使用ConcurrentHashMap
來存儲。而實際生產使用的時候,由於咱們可能須要更多其餘特性,每每就會採用其餘緩存框架,因此接下來咱們會分幾篇分別介紹幾個經常使用優秀緩存的整合與使用。spring
本篇咱們將介紹如何在Spring Boot中使用EhCache進程內緩存。這裏咱們將沿用上一篇的案例結果來進行改造,以實現EhCache的使用。緩存
先回顧下這個基礎案例的三個部分:bash
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實體的數據訪問實現(涵蓋了緩存註解)spring-boot
@CacheConfig(cacheNames = "users") public interface UserRepository extends JpaRepository<User, Long> { @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依賴
<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的輸出,好比:
@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
能夠看到:
org.springframework.cache.ehcache.EhCacheCacheManager
,而不是上一篇中的ConcurrentHashMap
了。整合成功!
本文的相關例子能夠查看下面倉庫中的chapter5-2
目錄:
若是您以爲本文不錯,歡迎Star
支持,您的關注是我堅持的動力!
本文首發: Spring Boot 2.x基礎教程:EhCache緩存的使用,轉載請註明出處。
歡迎關注個人公衆號:程序猿DD,得到獨家整理的學習資源和平常乾貨推送。
本系列教程 點擊直達目錄