【发布时间】:2017-12-21 17:44:25
【问题描述】:
我们有一个使用 spring-boot-cache-starter 的项目,注册一个 ehCache CacheManager 实现,并在代码中传播 @Cacheables。
然后,其他一些团队创建了一个 starter,它基本上依赖于 spring-boot-cache starter (hashmap) 自动配置的默认配置来处理自己的 @Cacheable 方法。
两个代码都包含@EnableCaching 注释,我们的问题是,如果我们注释主项目的@EnableCaching 注释,行为会有所不同。
- 如果我们不在项目中注释
@EnableCaching,当我们使用自定义启动器时,一切正常。@Cacheables来自 starter 在 starter 范围内被索引和解析,但是 来自我们域的@Cacheables在我们的ehcache中解析。 - 如果我们在我们的项目中评论
@EnableCaching,那么启动器和我们项目的@Cacheables都会被尝试解析 反对我们的ehCache实现。
这打破了我迄今为止的许多成见:
我一直以为
@Enable...之类的注解适用于所有上下文,无论放置(启动器/应用程序配置)如何,也无论扫描所有@时是否找到一次或两次987654335@ 班。为什么当两个注释都存在时这种情况才有效,我猜 spring-boot-cache-starter 中的
CacheManager是@ConditionalOnBean,所以在这种情况下,我希望两个项目都使用 @ 987654338@ bean 用于解析,不是每个人的域
P.S:在我们的主项目中找到的@EnableCaching 被放置在一个内部静态@Configuration 类中。这会很重要吗?
【问题讨论】:
标签: java spring-boot spring-cache spring-boot-starter jsr107