Pregunta

Estoy usando ehcache para el almacenamiento en caché de los resultados del método.La clave tiene que ser una combinación de ambos miembros de objeto y el método del parámetro.Mi clase se ve algo como:

Class A {

private B b;

@Cacheable(value="someCache",key="some key based on B and C")
public Result getResult(C c){
......
}

Necesito la clave para estar basadas en B y C.Me refería https://code.google.com/p/ehcache-spring-annotations/issues/detail?id=69 pero no se especifica la manera de incluir el parámetro de método en la generación de claves.Podría alguien ayudarme con esto?

¿Fue útil?

Solución 2

He implementado un generador de claves personalizados para resolver esto.Aún así, creo que esto puede ser resuelto por Ehcache sin usar un generador de claves personalizados.Pero no pude obtener la respuesta en ninguna parte.Por favor, vea mi respuesta a continuación:

@Component
public class Home {

    private Parameter param;

    @Cacheable(cacheName = "homeCache", 
                    keyGenerator = @KeyGenerator(name = "com.myapp.cache.Home.ParamKeyGenerator"))

    public Result getPerson(Person p) {

        //Do something with p
        return result;
    }

    public Parameter getParam() {

        return param;
    }

    public void setParam(Parameter param) {

        this.param = param;
    }

    public static class ParamKeyGenerator implements CacheKeyGenerator<Serializable> {

        public Serializable generateKey(MethodInvocation methodInvocation) {

            Object[] obj = methodInvocation.getArguments();
            Home h = (Home) methodInvocation.getThis();

            return this.generateKey(obj[0], h.getParam());
        }

        public Serializable generateKey(Object... data) {

            String key = ((Person) data[0]).getName() + ((Parameter) data[1]).getName();
            System.out.println("generating key: " + key);
            return key;
        }
    }
}

Otros consejos

usted puede tener acceso a la A objeto con root.target en la clave.por ejemplo,

key="#root.target.b.id+'-'+#c.id"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top