2015-01-19 7 views
11

Il mio errore è:Non riesci a trovare la cache di nome '' per CacheableOperation [] cache

Exception in thread "main" java.lang.IllegalArgumentException: Cannot find cache named 'getActionsBycasId' for CacheableOperation[public java.util.List com.codinko.database.DataBaseConnection.getActionsByCasId(int)] caches=[getActionsBycasId] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' 
    at org.springframework.cache.interceptor.AbstractCacheResolver.resolveCaches(AbstractCacheResolver.java:81) 
    at org.springframework.cache.interceptor.CacheAspectSupport.getCaches(CacheAspectSupport.java:214) 
    at org.springframework.cache.interceptor.CacheAspectSupport$CacheOperationContext.<init>(CacheAspectSupport.java:553) 
    at org.springframework.cache.interceptor.CacheAspectSupport.getOperationContext(CacheAspectSupport.java:227) 
    at org.springframework.cache.interceptor.CacheAspectSupport$CacheOperationContexts.<init>(CacheAspectSupport.java:498) 
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:299) 
    at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653) 
    at com.codinko.database.DataBaseConnection$$EnhancerBySpringCGLIB$$21a0d8a.getActionsByCasId(<generated>) 
    at com.codinko.caching.EmployeeDAO.getActionBycasId(EmployeeDAO.java:47) 
    at com.codinko.caching.EmployeeDAO$$FastClassBySpringCGLIB$$191aa49b.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:649) 
    at com.codinko.caching.EmployeeDAO$$EnhancerBySpringCGLIB$$3399d753.getActionBycasId(<generated>) 
    at com.codinko.caching.Main.main(Main.java:22)  

La mia funzione è:

@Cacheable("getActionsBycasId") 
public List<SMSAction> getActionsByCasId(int casId){ 
    System.out.println("Inside getActionsByCasId"); 
    //My logic 
    return list; 
}  

quando aggiungo qui di seguito su ehcache.xml poi sopra errore non viene, ma non posso sapere perché questo errore venga.

<cache name="getActionsBycasId" maxElementsInMemory="50" eternal="false" 
    overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />  

È questa configurazione sopra richiesto nel file di ehcache.xml anche se ho usato annotation ????

+6

Il punto è che si utilizza l'annotazione @Cacheable per istruire primavera per mettere in cache il risultato nella cache denominato "getActionsBycasId". Tuttavia, finché non si configura questa cache tramite il file di configurazione Ehcache, non si ha una cache denominata "getActionsBycasId". –

risposta

4

Prova questo:

@Bean 
public CacheManager cacheManager() { 
    SimpleCacheManager cacheManager = new SimpleCacheManager(); 
    List<Cache> caches = new ArrayList<Cache>(); 
    caches.add(new ConcurrentMapCache("getActionsBycasId")); 
    cacheManager.setCaches(caches); 
    return cacheManager; 
} 
6

Se si utilizza AWS nube di primavera, disattivare la configurazione automatica elasticache.

@EnableAutoConfiguration(exclude = ElastiCacheAutoConfiguration.class) 
@EnableCaching 
@SpringBootApplication 
public class Application { 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 
+0

Grazie per aver risolto il mio problema. È strano però che questo problema non si verifichi se la mia applicazione viene eseguita su una casella locale ma si verifica solo quando l'applicazione viene distribuita su EC2. – kca2ply

3
@SpringBootApplication(exclude = { 
     ContextStackAutoConfiguration.class, 
     ElastiCacheAutoConfiguration.class 
}) 

Basta essere in uso nit-schizzinosi @SpringBootApplication invece di @EnableAutoConfiguration

0

Quanto sopra esclude opzione, non ha funzionato per me. Ma, il sotto funzionava. !! Se si utilizza la nube di spring aws, quindi escludere l'elastico come di seguito.

<dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-starter-aws-messaging</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>com.amazonaws</groupId> 
        <artifactId> 
         elasticache-java-cluster-client 
        </artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
Problemi correlati