【问题标题】:Grails EH Cache object as parameter issuesGrails EH Cache 对象作为参数问题
【发布时间】:2015-11-16 17:21:59
【问题描述】:

我想在我的 grails 应用程序中使用 EHCache。我想用@Cacheable 缓存一个方法。

我正在测试这个场景: 简单的测试类:

class MyTestClassB {
def a
def b

@Override
boolean equals(Object obj) {
    println ("New A" + this.a)
    println ("Olda A" + obj.a)
    if (this.a != obj.a) {
        return false
    }
    return super.equals(obj)
}
}

要在服务类中缓存的方法:

@Transactional
class HelpService {
@Cacheable('newcache')
def inlineCacheService(def param) {
    println ("I am in the function")
    MyTestClass a = new MyTestClass()
    a.paramA = new Date()
    a.paramB = [
            id: "1",
            data: "f"
    ]

    return a
}

}

所以我在控制器中调用方法:

 MyTestClassB c1 = new MyTestClassB()
 c1.a = "paramc1"
 render "1: " + helpService.inlineCacheService(c1).paramA
 c1.a = "paramc1neu"
 render "<br/>1: " + helpService.inlineCacheService(c1).paramA

这个场景的问题是:我改变了参数对象的值,所以我期望我没有得到缓存的值。但是 inlineCacheService 的第二次调用从缓存中读取值。这里有什么问题?我是不是误会了什么?

【问题讨论】:

  • 嗯..我认为这看起来不错(尽管,您是否也覆盖了hashCode?)。如果在 equals 方法中设置断点并第二次调用 inlineCacheService 会发生什么?
  • 我没有覆盖 hashCode。这就是问题所在。现在可以了!!

标签: grails ehcache


【解决方案1】:

hashCode 丢失。实施后,缓存现在按预期工作。感谢@rcgeorge23 ​​

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 2020-04-15
    • 2012-12-03
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多