两个 CacheManager 相互覆盖
Two CacheManagers overriding each other
我有一个 JCacheCacheManager 通过 spring 启动器注入到我的应用程序中。这工作正常,直到我在同一个应用程序中定义一个 ehCacheCacheManager-Bean,它在单个存储库方法的 @cacheable-annotation 中使用。这本身也可以,但是注入的 JCacheCacheManager 再也找不到了。
这是 spring 启动时几乎所有一般情况下的预期行为。 Spring 引导提供具有已提供(如果未提供则为隐式)配置的自以为是的 beans。 spring boot 看到用户明确提供的任何 bean 的那一刻,spring boot 将停止自动提供它的 opinionated bean。这就是 AutoConfiguration.
的全部目的
为了让您同时使用这两个缓存管理器,请使用以下大纲
- 自己为 JCacheCacheManager 提供一个明确的 bean,将其标记为
@Primary
- 只要不使用 @Qualifier
请求特定的 bean,这个 bean 将默认注入到任何地方。
- 提供第二个类型为 ehCacheCacheManager 的 bean,同时为这个 bean 指定一个 bean 名称,比如
@Bean('ehCacheManager')
- 在要使用 ehCacheManager 的地方明确指定缓存名称,比如使用
@Cacheable(cacheManager="ehCacheManager" ...)
我做的略有不同:我更改了引用自定义 CacheResolver Bean 的 @Cacheable-Annotations 使用 EhCache。 EhCache 本身不再是 bean。冲突已解决。
我有一个 JCacheCacheManager 通过 spring 启动器注入到我的应用程序中。这工作正常,直到我在同一个应用程序中定义一个 ehCacheCacheManager-Bean,它在单个存储库方法的 @cacheable-annotation 中使用。这本身也可以,但是注入的 JCacheCacheManager 再也找不到了。
这是 spring 启动时几乎所有一般情况下的预期行为。 Spring 引导提供具有已提供(如果未提供则为隐式)配置的自以为是的 beans。 spring boot 看到用户明确提供的任何 bean 的那一刻,spring boot 将停止自动提供它的 opinionated bean。这就是 AutoConfiguration.
的全部目的为了让您同时使用这两个缓存管理器,请使用以下大纲
- 自己为 JCacheCacheManager 提供一个明确的 bean,将其标记为
@Primary
- 只要不使用@Qualifier
请求特定的 bean,这个 bean 将默认注入到任何地方。 - 提供第二个类型为 ehCacheCacheManager 的 bean,同时为这个 bean 指定一个 bean 名称,比如
@Bean('ehCacheManager')
- 在要使用 ehCacheManager 的地方明确指定缓存名称,比如使用
@Cacheable(cacheManager="ehCacheManager" ...)
我做的略有不同:我更改了引用自定义 CacheResolver Bean 的 @Cacheable-Annotations 使用 EhCache。 EhCache 本身不再是 bean。冲突已解决。