Spring Boot基礎教程: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<
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=
"
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
可以看到:
- 第一行輸出的CacheManager type為org.springframework.cache.ehcache.EhCacheCacheManager,而不是之前講的ConcurrentHashMap了。
- 第二次查詢的時候,沒有輸出SQL語句,所以是走的快取獲取
整合成功!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2705033/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring Boot 2.x基礎教程:EhCache快取的使用Spring Boot快取
- Spring Boot 2.x基礎教程:使用EhCache快取叢集Spring Boot快取
- Spring Boot:簡單使用EhCache快取框架Spring Boot快取框架
- EhCache快取使用教程快取
- 使用EHCACHE三步搞定SPRING BOOT 快取Spring Boot快取
- 另一種快取,Spring Boot 整合 Ehcache快取Spring Boot
- Spring boot學習(八)Spring boot配置ehcache快取框架Spring Boot快取框架
- Spring Boot 2.x基礎教程:使用集中式快取RedisSpring Boot快取Redis
- Spring Boot Oauth2快取UserDetails到EhcacheSpring BootOAuth快取AI
- Ehcache 整合Spring 使用頁面、物件快取Spring物件快取
- Spring中整合Ehcache使用頁面、物件快取Spring物件快取
- Spring Boot 揭祕與實戰(二) 資料快取篇 - EhCacheSpring Boot快取
- Spring 整合 Ehcache 管理快取詳解Spring快取
- Spring Boot 2.x基礎教程:使用MongoDBSpring BootMongoDB
- 分散式快取基礎教程分散式快取
- Java快取EhcacheJava快取
- Ehcache快取配置快取
- Spring Boot 2.x基礎教程:使用JdbcTemplate訪Spring BootJDBC
- spring和ehcache整合,實現基於註解的快取實現Spring快取
- 5、Spring Boot快取Spring Boot快取
- Mybatis 整合 ehcache快取MyBatis快取
- 快取初見——EhCache快取
- EhCache 分散式快取/快取叢集分散式快取
- Spring Boot 中使用Caffeine快取的簡單例子Spring Boot快取單例
- Spring Boot Cache Redis快取Spring BootRedis快取
- Spring Boot 基礎Spring Boot
- spring boot使用Jedis整合Redis實現快取(AOP)Spring BootRedis快取
- Spring Boot 快速整合 Ehcache3Spring Boot
- Spring Boot 2.x基礎教程:使用Redis的釋出訂閱功能Spring BootRedis
- SpringBoot中Shiro快取使用Redis、EhcacheSpring Boot快取Redis
- Spring Boot 2.x基礎教程:快速入門Spring Boot
- Spring Boot 2.x基礎教程:使用Flyway管理資料庫版本Spring Boot資料庫
- Spring Boot 2.x基礎教程:使用tinylog記錄日誌Spring Boot
- Spring WebFlux 基礎教程:WebSocket 使用SpringWebUX
- 快取基礎整理快取
- Ehcache介紹及整合Spring實現快取記憶體Spring快取記憶體
- 在Spring Boot快取API - Code FactorySpring Boot快取API
- Spring Boot中使用TestContainer測試快取機制Spring BootAI快取