如何解决CaffeineCacheManager() 构造函数需要 cacheName 吗?
我有一个 MultipleCacheManager 类,如下所示:
@EnableCaching
public class MultipleCacheManagerConfig {
@Bean
@Primary
public CacheManager mainCacheManager() {
// instantiate caffeine manager and add in specifications
caffeineCacheManager cacheManager = new caffeineCacheManager("example1","example2");
cacheManager.setcaffeine(caffeine.newBuilder()
.expireAfterWrite(4,TimeUnit.HOURS)
.recordStats());
return cacheManager;
}
// these are examples of alternate cache managers if another cache needs to be configured differently.
public CacheManager alternatecaffeineManager() {
caffeineCacheManager cacheManager = new caffeineCacheManager("example3");
cacheManager.setcaffeine(caffeine.newBuilder()
.expireAfterWrite(1,TimeUnit.HOURS)
.recordStats());
return cacheManager;
}
我真的需要在 CaffeieneCacheManager() 构造函数中传入我的 cacheNames 吗?只要 @Cacheable
具有 @Cacheable(cacheName = "example1",cacheManager = "mainCacheManager")
属性就重要吗?从技术上讲,缓存管理器此时已经与名称相关联。
解决方法
您总是可以先在 documentation
中找到有用的信息public void setCacheNames(@Nullable Collection cacheNames) 为此 CacheManager 的“静态”模式指定一组缓存名称。号码 调用此方法后,缓存及其名称将被修复, 运行时无需创建更多缓存区域。
还有
CaffeineCacheManager(String... cacheNames) 构造一个静态 CaffeineCacheManager,管理指定缓存名称的缓存 仅。
如您所见,在构造函数上提供 cacheNames 意味着此 cacheManager 将来只能处理那些 cacheNames。所以你不能指示缓存管理器在未来动态处理其他缓存名称。
您仍然需要通过注释传递 cacheNames
@Cacheable(cacheName = "example1",cacheManager = "mainCacheManager")
就好像您有多个使用此 cacheManager 的方法一样,这两个方法每个都有自己的 cacheName 是有意义的。
@Cacheable(cacheName = "example1",cacheManager = "mainCacheManager")
public String method1( String a) {
....
}
@Cacheable(cacheName = "example2",cacheManager = "mainCacheManager")
public String method2( String b) {
....
}
这 2 个不同的 cacheName 通知 cacheManager 它应该处理 2 个不同的缓存命名空间,并且注释通知 cacheManager 哪个 cacheName 与此方法相关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。