CaffeineCacheManager() 构造函数需要 cacheName 吗?

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?