java - Spring从具有另一个签名的方法中驱逐缓存

标签 java spring spring-cache

我用一种方法缓存一些查询

    @Override
    @Cacheable(cacheNames = "user-actions")
    public UserAction getUserAction(UUID userId) {
        ...
    }

我想用另一种方法清除缓存。例如,如果方法具有相同的签名,则它可以工作

    @CacheEvict(cacheNames = "user-actions")
    public void evictUserLevel(UUID userId) {
        log.info("Cache user-actions has been evicted");
    }

但是,如果我不将 userId 传递给将被逐出缓存的方法,或者如果它有多个参数,是否有方法可以逐出缓存?这不起作用:

    @CacheEvict(cacheNames = "user-actions")
    public void processEvent(UserEvent event, UUID userId) {
        ...
    }

最佳答案

这对我有用

    @CacheEvict(cacheNames = "user-events", key = "#root.args[1]")
    public void processEvent(UserEvent event, UUID userId) {
        ...
    }

root.args - 表示方法参数,[1] - 是参数的索引

关于java - Spring从具有另一个签名的方法中驱逐缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66915800/

相关文章:

spring - <task :annotation-driven> in spring 4. 3 的注释是什么

java - Spring 启动|创建自定义缓存注释和实现

java - Spring 可缓存除非条件不起作用

java - Spring boot Cacheable中从缓存中检索数据

java - StatelessSession支持延迟加载吗?

Java 在 JPanel 类之外绘制图像

java - dozer boolean 属性映射

java - android 2同屏 Activity

java - 一个集合中的spring data jpa查询值

java - Spring : Unsatisfied dependency