我们有一个使用 spring-boot-cache-starter 的项目,注册一个实现,并在代码中ehCache
CacheManager
传播。@Cacheables
然后,其他一些团队创建了一个 starter,它基本上依赖于spring-boot-cache
starter (hashmap) 自动配置的默认配置来处理自己的@Cacheable
方法。
两个代码都包含@EnableCaching
注释,我们的问题是,如果我们注释主项目的 @EnableCaching 注释,行为会有所不同。
- 如果我们不在
@EnableCaching
我们的项目中评论,当我们使用自定义启动器时,一切正常。@Cacheables
from the starter 在 starter 范围内被索引和解析,但从@Cacheables
我们的域被解析在我们的ehcache
. - 如果我们
@EnableCaching
在我们的项目中发表评论,那么启动器和我们的项目都会@Cacheables
尝试针对我们的ehCache
实现来解决。
这打破了我迄今为止的许多先入之见:
我一直认为诸如
@Enable
... 之类的注释适用于所有上下文,无论放置(启动器/应用程序配置)如何,也无论在扫描所有@Configuration
类时是否找到一次或两次。为什么当两个注释都存在时案例会起作用,我猜
CacheManager
spring-boot-cache-starter 中的 是 a@ConditionalOnBean
,所以在这种情况下,我希望两个项目都使用ehcache
bean 进行解析,而不是每个项目的域
PS:@EnableCaching
在我们的主项目中找到的放在一个内部静态@Configuration 类上。这可能很重要吗?