2016-08-19 3 views
1

Ich bin neu in Spring Caching. Ich benutze Spring-Boot-Starter-1.4.0.RELEASE in meinem Maven Pom. Soweit ich die Dokumentation zu verstehen, wenn ich so etwas wie diese nehmen:Mit @Cacheable annotierte Methode wird nicht abgefangen

@Configuration 
@EnableCaching 
public class TestApplication { 
    @Bean 
    public CacheManager cacheManager() { 
     // configure and return an implementation of Spring's CacheManager SPI 
     SimpleCacheManager cacheManager = new SimpleCacheManager(); 
     cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("default"))); 
     return cacheManager; 
    } 

    @Bean 
    public MyService myService() { 
     // configure and return a class having @Cacheable methods 
     return new MyService(); 
    } 

    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(TestConfiguration.class); 
     MyService ms = ctx.getBean(MyService.class); 
     ms.doCacheableOperation(); // calls the underlying method 
     ms.doCacheableOperation(); // SHOULD just consult the cache 
    } 
} 

und habe eine Klasse wie folgt:

public class MyService { 
    @Cacheable 
    public String doCacheableOperation() { 
     System.out.println("======================CALLING EXPENSIVE METHOD======================="); 
     return "done"; 
    } 
} 

Wenn die Hauptmethode in Testapplication läuft, um den ersten Anruf zu MyServce # doCacheableOperation sollte auf dem Bildschirm ausgegeben werden, aber die zweite sollte nicht, da das Ergebnis vom ersten Mal zwischengespeichert werden würde. Dies ist jedoch nicht der Fall; Die Ausgabe wird zweimal angezeigt.

Der Konfigurationscode wird von der Javadoc für EnableCaching gehoben: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/cache/annotation/EnableCaching.html

Eine Sache, die mir tut Puzzle, das ist, wenn ich die Instanz von MyService debuggen und inspizieren, es ist nur das rohe Objekt ist in jedem CGLIB nicht umgebrochen Unterklasse usw.

Wie muss ich meine Konfiguration/Vorgehensweise ändern, damit das Ergebnis von MyService # doCacheableOperation zwischengespeichert wird?

Antwort

2

Oh, Junge. Fand es. Es war ein einfacher Tippfehler in der Klasse I bis SpringApplication # Lauf sendete:

SpringApplication.run(TestConfiguration.class) 

sollte

gewesen
SpringApplication.run(TestApplication.class) 

Alles scheint jetzt in Ordnung zu sein!

Verwandte Themen