我尝试在基于 Spring Boot 2/Spring Framework 5 的 Web 应用程序中使用 EhCache 3.5 缓存功能。
我添加了 EHCache 依赖项:
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.0.0</version>
</dependency>
然后在 src/main/resources 文件夹中创建 ehcache.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
monitoring="autodetect" dynamicConfig="true">
<cache name="orders" maxElementsInMemory="100"
eternal="false" overflowToDisk="false"
memoryStoreEvictionPolicy="LFU" copyOnRead="true"
copyOnWrite="true" />
</ehcache>
Spring 5 参考指南没有提到 EHCache 的使用,Spring 4 参考指南指出:“Ehcache 3.x 完全符合 JSR-107,不需要专门的支持。”
所以我创建了控制器 OrderController 和 REST 端点:
@Cacheable("orders")
@GetMapping(path = "/{id}")
public Order findById(@PathVariable int id) {
return orderRepository.findById(id);
}
春季启动配置:
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
但是当我调用这个端点时,我得到了一个异常:
无法为 Builder[public org.Order org.OrderController.findById(int)] 找到名为“orders”的缓存 键='' | 密钥生成器='' | 缓存管理器='' | 缓存解析器='' | 条件='' | 除非='' | 同步='假'
然后我尝试使用 Spring Framework 4 中的示例:
@Bean
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
}
@Bean
public EhCacheManagerFactoryBean ehCacheCacheManager() {
EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
cmfb.setConfigLocation(new ClassPathResource("ehcache.xml"));
cmfb.setShared(true);
return cmfb;
}
但由于异常而无法编译:
类型 net.sf.ehcache.CacheManager 无法解析。它是从所需的 .class 文件中间接引用的
请指教。