java - Spring将缓存添加到现有的CacheManager bean
问题描述
我有一个依赖于库的应用程序。应用程序可能有也可能没有 CacheManager 类型的 bean。图书馆内部厨房也使用缓存。因此,它必须使用应用程序的现有 bean,或者使用缓存 A、B、C 创建自己的一个。如果库使用现有的 bean,那么它必须使用缓存 A、B、C 来丰富该 bean。我到底该怎么做?
我尝试将以下代码添加到库中,用于“不存在时创建”部分
@Bean
@ConditionalOnMissingBean(CacheManager.class)
public CacheManager codPlusCacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(Arrays.asList(
new ConcurrentMapCache("A"),
new ConcurrentMapCache("B"),
new ConcurrentMapCache("C")))
return cacheManager;
}
如何丰富现有的 bean?
解决方案
你不必丰富现有的,你可以让两个豆子并存。为此,您可以使用 spring 缓存并确定您的缓存管理器。例如:
@Bean
@Qualifier("libCacheManager")
public JCacheCacheManager libCacheManager() {
// Details Omitted.
}
然后在您的可缓存方法上使用:
@Cacheable(cacheManager = "libCacheManager", cacheNames = "name")
推荐阅读
- reactjs - 尝试从 reducer 返回数组时应用程序崩溃
- php - Laravel:WhereBetween Date 与请求日期
- c++ - QT 和 OpenCV 问题在不同线程中的 QGraphicsView 上查看 Opencv Mat :: QObject::killTimer: 计时器不能从另一个线程停止
- vba - SAP OLE 自动化 Logon() 方法参数
- django - Django - 根据加载的视图选择选择值
- sql - 是否存在允许列和值之间视觉对称的 INSERT 语法?
- datatables - Xpages 灵活的视图控制
- javascript - 使用 Javascript 和正则表达式的货币计数器
- c# - 在 DataGrid 中使用交互 EventName=PreviewKeyDown 时,如何捕获在 XAML 中按下的键?
- swift - Swift:iTunesLibrary musicFolderLocation 返回错误的位置