当前位置: 首页 > 知识库问答 >
问题:

从带有@Cacheable注释的方法中清除缓存

范浩荡
2023-03-14

我有一个用@Cacheable注释的方法。如果在方法内部捕获了异常,我希望清除缓存。但是,缓存似乎是在清除缓存的行之后执行的方面中加载的。因此,当在方法中捕获异常时,即使清除了缓存,空字符串结果仍保留在缓存中。

我应该从哪里清除缓存?

@Cacheable("myCache") 
public String myMethod() {
    String result="";
    try {
        result = doSomething();
    } catch (Exception e) {
        cacheManager.getCache("myCache").clear();
    }
    return token;
}

共有1个答案

卫琛
2023-03-14

好的-注释上有一个属性可以使用。以下示例来自(http://websystique.com/spring/spring-4-cacheable-cacheput-cacheevict-caching-cacheconfig-enablecaching-tutorial/)

除非:条件缓存,应用于方法的返回值。项将被缓存,除非满足“除非”中提到的条件。注意,条件适用于方法的返回值#结果引用方法返回值。

@Cacheable(value="products", key="#product.name", condition="#product.price<500", unless="#result.outofstock")
public Product findProduct(Product product){
..
return aproduct;
} 

因此,您可以使用,除非=“#result.length()==0”,并在错误情况下或不希望缓存结果的任何其他时间返回空字符串。

 类似资料:
  • 当我调用我用注释的方法时,我知道缓存没有被使用,因为我在方法内部进行了打印,如果使用了缓存,就不应该打印它。 在日志中,我知道缓存正在初始化 我应该提到调用该方法的方法是常规Java

  • 嗨,我想排除带注释的方法,这里是代码。 排除任何用NoTryCatch注释的方法 上面的代码确实排除了用NoTryCatch注释的方法,但是当这个方法被异常调用时,它会停止下一个方法的执行。例如 现在我按顺序调用方法 test1()不运行。 如果我删除test1()运行

  • 我遇到了一个奇怪的问题,我用@transactional注释了我的控制器(只是为了测试),但让我吃惊的是,当它在内部命中带有@cacheable注释的方法时,它并没有创建任何缓存键 带有@cacheable问题的方法。 在内部,geography service helper直接调用api manager,使用forceReload=false。 我是不是错过了什么傻事?

  • 代码如下所示。 但是,上面的代码不起作用:它给出了以下异常:

  • 问题内容: 我需要 在类中使用@X注释的方法或使用@X注释的方法的切入点 。我还 需要注释对象 。如果同时注释了类和方法,则 我更喜欢将方法注释作为参数 。 我尝试了以下操作,这将创建“不一致的绑定”警告。(为什么不将它们设置为null?) 下面创建“跨’||’的参数x的模糊绑定 在切入点”警告。(我认为这并不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将先前的尝试自然地分

  • 本文向大家介绍C#清除WebBrowser中Cookie缓存的方法,包括了C#清除WebBrowser中Cookie缓存的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#清除WebBrowser中Cookie缓存的方法。分享给大家供大家参考,具体如下: 最近用C#写一个程序,用一个窗体中的WebBrowser来登陆网站,但是WebBrowser有cookie缓存,第二次登陆的时候W