2012-08-09 12 views
6

I mają następujące za korzystanie z @Cacheable w sprężynę (3.1):Wiosna @Cacheable złożonych kluczy nadal wykonywane

sprężyny:

<?xml version="1.0" encoding="UTF-8" ?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oauth="http://www.springframework.org/schema/security/oauth2" 
    xmlns:sec="http://www.springframework.org/schema/security" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:cache="http://www.springframework.org/schema/cache" 
    xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/security/oauth2 
          http://www.springframework.org/schema/security/spring-security-oauth2-1.0.xsd 
          http://www.springframework.org/schema/data/mongo 
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd 
          http://www.springframework.org/schema/cache 
          http://www.springframework.org/schema/cache/spring-cache.xsd 
          http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
          http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd 
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"> 

<cache:annotation-driven /> 
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache" /> 
<!-- Ehcache library setup --> 
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
    p:config-location="classpath:ehcache.xml" /> 

Mavenie:

<dependency> 
     <groupId>net.sf.ehcache</groupId> 
     <artifactId>ehcache-core</artifactId> 
     <version>2.5.3</version> 
    </dependency> 

Metoda buforowana:

@Cacheable(value="cahceName", key="concat(#param1).concat(‘-’).concat(#param2)") 
    public String cachedMethod(String param1,String param2) 

Niestety, kiedy debuguję kod, widzę, że buforowana metoda jest wywoływana więcej niż jeden raz, nawet jeśli parametry param1 i param2 są takie same (tzn. Nie jest używany kod).

Wszelkie pomysły?

+0

notatka: aby pamięć podręczna działała, musisz wywołać metodę, która jest w interfejsie. – checklist

+0

Hi Lista kontrolna - Czy możesz określić, które z dwóch zaleceń naprawiło Twój problem: key = "# param1.concat (" - '). Concat (# param2) "lub key =" # p0.concat ("-'). concat (# p1) "?? lub oba? – HellishHeat

+0

HI. Obaj pracowali – checklist

Odpowiedz

15

Kluczem nie pojawi się prawidłowa -

może mieć na myśli - @Cacheable(value="cacheName", key="#param1.concat(‘-’).concat(#param2)")

Ponadto, jeśli kompilacja odbywa się bez informacji debugowania, w param1, nazwy argumentów param2 nie będzie dostępny do wyrażeń. Zamiast tego można odnieść się do nich za pomocą p0, p1 etc ten sposób:

@Cacheable(value="cahceName", key="#p0.concat('-').concat(#p1)")

Aktualizacja:

mam test jeden stronie, która pokazuje, jak to działa - https://gist.github.com/3315275

+1

, czy moglibyście rozwinąć część debugowania? i dlaczego p1 różni się od paam1 – checklist

+0

Oto jedno powiązane pytanie na ten temat - http://stackoverflow.com/questions/11041506/java-compiler-automatically-renaming-parameters-obfuscating –

+0

Naprawiłem klucz, ale nadal nie ma praca. Nawet całkowicie zabieram klucz i moja metoda jest ciągle wywoływana. Czy jest coś, co mógłbym robić źle? – checklist

Powiązane problemy