两个 CacheManager 相互覆盖

Two CacheManagers overriding each other

我有一个 JCacheCacheManager 通过 spring 启动器注入到我的应用程序中。这工作正常,直到我在同一个应用程序中定义一个 ehCacheCacheManager-Bean,它在单个存储库方法的 @cacheable-annotation 中使用。这本身也可以,但是注入的 JCacheCacheManager 再也找不到了。

这是 spring 启动时几乎所有一般情况下的预期行为。 Spring 引导提供具有已提供(如果未提供则为隐式)配置的自以为是的 beans。 spring boot 看到用户明确提供的任何 bean 的那一刻,spring boot 将停止自动提供它的 opinionated bean。这就是 AutoConfiguration.

的全部目的

为了让您同时使用这两个缓存管理器,请使用以下大纲

  1. 自己为 JCacheCacheManager 提供一个明确的 bean,将其标记为 @Primary - 只要不使用 @Qualifier 请求特定的 bean,这个 bean 将默认注入到任何地方。
  2. 提供第二个类型为 ehCacheCacheManager 的 bean,同时为这个 bean 指定一个 bean 名称,比如 @Bean('ehCacheManager')
  3. 在要使用 ehCacheManager 的地方明确指定缓存名称,比如使用 @Cacheable(cacheManager="ehCacheManager" ...)

我做的略有不同:我更改了引用自定义 CacheResolver Bean 的 @Cacheable-Annotations 使用 EhCache。 EhCache 本身不再是 bean。冲突已解决。