我正在尝试在 Spring Boot 2 应用程序中启用 EhCache 3 缓存,并且据我所知,我已经正确设置了它,但是缓存只是......不起作用,我没有得到任何关于原因的信息。
我已经添加到我的 Maven POM 中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
</dependency>
我添加了一个@EnableCaching
注释。我已经指定了配置,我正在使用bootstrap.yml
:
spring:
cache:
jcache:
config: classpath:ehcache.xml
但以防万一我也将spring.cache.jcache.config
版本放在属性文件中。
我已经写了一个基本src/main/resources/ehcache.xml
文件...
最后,我设置了一个方法,@Cacheable
但是当我使用“找不到名为...的缓存”调用它时它会出错
从字面上看,我写的东西一点都不重要ehcache.xml
。我可以粘贴 Lorem Ipsum 文本而不是 XML,并且没有错误或指示它甚至打开了文件。
Spring Boot 本身似乎已经找到了 JSR 107 自动配置的适当先决条件:
JCacheCacheConfiguration matched:
- @ConditionalOnClass found required classes 'javax.cache.Caching', 'org.springframework.cache.jcache.JCacheCacheManager' (OnClassCondition)
- Cache org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration automatic cache type (CacheCondition)
我试过回到 EhCache 2,所以我替换org.ehcache
为net.sf.ehcache
,将我的 YML 切换为ehcache
而不是jcache
并删除javax.cache
。这会将其放入我的自动配置报告中:
EhCacheCacheConfiguration matched:
- @ConditionalOnClass found required classes 'net.sf.ehcache.Cache', 'org.springframework.cache.ehcache.EhCacheCacheManager' (OnClassCondition)
- Cache org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration automatic cache type (CacheCondition)
- ResourceCondition (EhCache) found resource 'classpath:/ehcache.xml' (EhCacheCacheConfiguration.ConfigAvailableCondition)
但是我仍然没有任何可用的缓存。为什么 Spring 的自动配置机制会提到它找到了 EhCache 2 配置文件但实际上没有配置任何东西?我是否还需要在报告中查找其他一些自动配置类,例如 GenericCache、CacheConfiguration 等?
我看不到任何迹象表明它试图做任何事情来启动缓存子系统,读取我的配置,做任何事情。
与自动配置一样方便,当它不想做这件事时,它会令人沮丧地告诉我为什么它决定让我失望,所以我真的可以使用一些帮助来弄清楚如何从事情中梳理出这些细节。
我错过了什么?我可以调试什么以及在哪里可以找出为什么它忽略了我试图告诉它的 XML 配置?我尝试在 jcache 设置周围向 Spring CacheProperties 添加一些断点,但是当我附加调试器时它没有命中它们。