Spring Cache與Ehcache 3整合
在本文中,我們將研究一些 Spring Cache 概念,然後整合 Ehcache 3。
預設情況下,由於沒有額外的提供者,Spring Cache 使用 JCache,它是Spring-Cache-Starter作為依賴項新增時存在於類路徑上的預設提供者。它只不過是一個簡單的 ConcurrentHashMap。
現在有很多支援的快取提供程式,我們可以與Spring快取整合,如Redis、Couchbase、Hazelcast等。今天我們將看看如何整合Ehcache 3。
Spring Cache介紹
控制器:
@RestController public class WebService { @Autowired private Service service; @GetMapping("/{name}") public Person generatePerson(@PathVariable(value = "name") String name) { return service.generatePerson(name); } |
服務類:
@org.springframework.stereotype.Service public class Service { Logger logger = LoggerFactory.getLogger(Service.class); @Cacheable(cacheNames = "cacheStore", key = "name") public Person generatePerson(String name) { Person person = new Person(UUID.randomUUID().toString(), name, "Switzerland"); logger.info("Generated Person: {}", person); return person; } |
方法generatePerson有一個cachable註釋定義了一個名為 的快取cacheStore。通過這種方式,您可以配置將儲存鍵值對的快取。這裡,值是函式的結果,鍵是輸入引數的名稱。
要定義您的鍵,您可以使用 Spring 的表示式語言 ( SpEL ) 格式。如果您不提供鍵,它將使用輸入作為鍵本身。
將 Ehcache 3 與 Spring Cache 整合
為了整合Ehcache 3,我們需要新增以下兩個依賴。
<dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency> <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> </dependency> |
我們不會在這裡指定它的版本,因為 spring starter 知道哪個依賴版本是相容的。
預設情況下,Spring Cache 僅支援 Ehcache 2.x 版本,因此我們必須新增一些配置才能使其與版本 3 相容。
@Configuration public class AppConfig { @Bean public CacheManager EhcacheManager() { CacheConfiguration<String, Person> cachecConfig = CacheConfigurationBuilder .newCacheConfigurationBuilder(String.class, Person.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .offheap(10, MemoryUnit.MB) .build()) .withExpiry(ExpiryPolicyBuilder.timeToIdleExpiration(Duration.ofSeconds(10))) .build(); CachingProvider cachingProvider = Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(); javax.cache.configuration.Configuration<String, Person> configuration = Eh107Configuration.fromEhcacheCacheConfiguration(cachecConfig); cacheManager.createCache("cacheStore", configuration); return cacheManager; } } |
在這裡,我們做了一些配置來定義一個cacheStore具有快取過期和快取大小等屬性的快取。如果沒有來自快取的鍵請求,我們將過期時間設定為 10 秒,並且還設定了 10 MB 的堆外大小用於快取。
程式碼已上傳到GitHub。
相關文章
- Spring Boot 快速整合 Ehcache3Spring Boot
- Spring Cache + Caffeine的整合與使用Spring
- Spring 整合 Ehcache 管理快取詳解Spring快取
- 另一種快取,Spring Boot 整合 Ehcache快取Spring Boot
- Ehcache 整合Spring 使用頁面、物件快取Spring物件快取
- 史上最全面的Spring Boot Cache使用與整合Spring Boot
- Spring中整合Ehcache使用頁面、物件快取Spring物件快取
- Java快取機制:Ehcache與Guava Cache的比較Java快取Guava
- org.springframework.cache.ehcache.EhCacheManagerFactoryBeanSpringFrameworkBean
- SpringBoot-Cache 集合 EhCacheSpring Boot
- Ehcache 介紹(3)--Ehcache3 基本使用
- 結合Ehcache元註解與SpringSpring
- Mybatis 整合 ehcache快取MyBatis快取
- mybatis二級快取應用及與ehcache整合MyBatis快取
- 學習筆記:cache 和spring cache 技術2--spring cache 的基本使用 、spring-Redis整合筆記SpringRedis
- Ehcache介紹及整合Spring實現快取記憶體Spring快取記憶體
- spring ehcache報錯Spring
- 有了Ehcache Annotations for Spring還需要配置org.hibernate.cache.EhCacheProvider嗎?SpringIDE
- Spring Boot 3中將JWT與Spring Security 6整合Spring BootJWT
- spring和ehcache整合,實現基於註解的快取實現Spring快取
- Spring整合Disruptor3Spring
- FreeMarker整合Spring 3Spring
- Struts+Spring整合3Spring
- Spring與ActiveMQ整合SpringMQ
- spring與redis整合SpringRedis
- Mybatis與Spring整合MyBatisSpring
- struts與Spring整合Spring
- Spring Cache的基本使用與分析Spring
- spring:spring與mybatis的整合SpringMyBatis
- mybatis3 新增ehcache支援MyBatisS3
- ElasticSearch與Spring Boot整合ElasticsearchSpring Boot
- 【RabbitMQ】RabbitMQ與Spring整合MQSpring
- CAS與Spring的整合Spring
- struts與spring 的整合Spring
- Spring CacheSpring
- Shiro【授權過濾器、與ehcache整合、驗證碼、記住我】過濾器
- Unit08: Spring與MyBatis整合 、 Spring整合MyBatis應用SpringMyBatis
- Spring AI與大模型Ollama如何整合整合?SpringAI大模型