使用多个键@Caching

2022-09-02 22:55:24

我有一个服务,它接受DTO并返回一些结果:

@Override
public int foo(Bar bar) {
    ....
}

条形图如下(简体):

public class Bar {
    public int id;
    public String name;
    public String baz;

    @Override
    public int hashCode() {
        //this is already being defined for something else
        ...
    }

    @Override
    public boolean equals(Object o) {
        //this is already being defined for something else
        ...
    }
}

我想在foo方法上使用@Cacheable;但是,我想对id和name属性进行哈希处理,但不是baz。有没有办法做到这一点?


答案 1

您也可以使用此方法

@Override
@Cacheable(key="{#bar.name, #bar.id}")
public int foo(Bar bar) {
    ....
}

建议不要在多个方法参数上使用哈希码作为键@Cacheable键


答案 2

是的,您可以按照以下行使用 Spring-EL 表达式进行指定:

@Override
@Cacheable(key="#bar.name.concat('-').concat(#bar.id)")
public int foo(Bar bar) {
    ....
}

或者在柱上定义一个修改后的哈希码,并调用:

@Override
@Cacheable(key="#bar.hashCodeWithIdName")
public int foo(Bar bar) {
    ....
}