2017-08-29 2 views
0

Ich bin einen Frühling 5.0.0 RC3 basierte MVC Web-Anwendung Entwicklung mit @Cacheable aus Leistungsgründen in vielen Repositories:@EnableIntegration deaktiviert @Cacheable

package com.example; 

@Configuration 
@EnableTransactionManagement 
@EnableScheduling 
@EnableCaching(order = Ordered.LOWEST_PRECEDENCE) 
@EnableWebMvc 
@ComponentScan(basePackages = {"com.example"}) 
public class MyConfig implements WebMvcConfigurer, SchedulingConfigurer, CachingConfigurer 
{ 
    ... 
} 

Jetzt, nach einer zweiten Konfiguration für Frühjahr Integration zu schaffen (getestet mit 4.3.11.RELEASE oder 5.0.0.M6), das Zwischenspeichern funktioniert nicht mehr (= Spring ignoriert die @Cacheable Annotationen und springt jedes Mal in die zuvor zwischengespeicherten Methoden).

Hier ist meine Integration Konfiguration Skelett:

package com.example.integration; 

@Configuration 
@EnableIntegration 
public class OrderIntegrationConfiguration 
{ 
    @Bean 
    @Transactional(rollbackFor = Throwable.class) 
    public IntegrationFlow processOrders() 
    { 
     return IntegrationFlows.from("order.input") 
           .channel(orderChannel()) 
           .filter(Order.class, o -> o != null) 
           .handle(ediOrderHandler()) 
           .handle(mailOrderHandler()) 
           .get(); 
    } 


    @Bean 
    public MessageHandler ediOrderHandler() 
    { 
     return new ServiceActivatingHandler(message -> 
     { 
      doSomething(message); 
     }); 
    } 

    @Bean 
    public MessageHandler mailOrderHandler() 
    { 
     return new ServiceActivatingHandler(message -> 
     { 
      doSomething(message); 
     }); 
    } 

    @Bean 
    public MessageChannel orderChannel() 
    { 
     return new ExecutorChannel(Executors.newCachedThreadPool()); 
    } 
} 

Entfernen der @EnableIntegration Caching-Funktionalität wieder her, aber deaktiviert die gesamte Integration Funktionalität natürlich.

Die Protokolldateien sind sauber - keine Ausnahmen/Warnung/Fehlerprotokolle.

Ich bin mir ziemlich sicher, dass ich etwas sehr falsch mache, aber ich weiß nicht, was es sein könnte. Irgendwelche Vorschläge?


-Update 2017.08.30:

Hier ist der Stack-Trace ohne@EnableIntegration kommentiert auf meinem @Configuration:

java.lang.Throwable 
    at com.example.config.PlatformConfigRepository.getAll(PlatformConfigRepository.java:59) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.example.cache.AppCacheLoader.load(AppCacheLoader.java:57) 
    at com.github.benmanes.caffeine.cache.BoundedLocalCache$BoundedLocalLoadingCache.lambda$new$0(BoundedLocalCache.java:3311) 
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2034) 
    at java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1853) 
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2032) 
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2015) 
    at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:113) 
    at com.github.benmanes.caffeine.cache.LocalLoadingCache.get(LocalLoadingCache.java:67) 
    at org.springframework.cache.caffeine.CaffeineCache.get(CaffeineCache.java:88) 
    at org.springframework.cache.interceptor.AbstractCacheInvoker.doGet(AbstractCacheInvoker.java:73) 
    at org.springframework.cache.interceptor.CacheAspectSupport.findInCaches(CacheAspectSupport.java:527) 
    at org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem(CacheAspectSupport.java:492) 
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:374) 
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:316) 
    at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689) 
    at com.example.config.PlatformConfigRepository$$EnhancerBySpringCGLIB$$9c0006d6.getAll(<generated>) 
    at com.example.config.PlatformConfigService.getAll(PlatformConfigService.java:59) 
    at com.example.config.PlatformConfigService.getById(PlatformConfigService.java:71) 
    at com.example.user.ConfigBasedRole.getPlatformConfig(ConfigBasedRole.java:43) 
    at com.example.user.BranchRole.getBranch(BranchRole.java:55) 
    at com.example.spring.controller.BaseController.getBranch(BaseController.java:177) 
    at com.example.item.search.SearchController.getObjComfortSearchParameters(SearchController.java:361) 
    at com.example.item.search.SearchController.getObjSearchParametersForType(SearchController.java:344) 
    at com.example.item.search.SearchController.getObjSearchParameters(SearchController.java:316) 
    at com.example.item.search.SearchController.tireSearch(SearchController.java:72) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:869) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:775) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:981) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:915) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:726) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:394) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311) 
    at com.example.i18n.UrlLocaleFilter.doFilter(UrlLocaleFilter.java:199) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at com.example.user.PasswordJailFilter.doFilter(PasswordJailFilter.java:72) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:155) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.sec... 

Und hier ist der Stack-Trace mit@EnableIntegration kommentiert auf meinem @Configuration:

java.lang.Throwable 
    at com.example.config.PlatformConfigRepository.getAll(PlatformConfigRepository.java:59) 
    at com.example.config.PlatformConfigService.getAll(PlatformConfigService.java:59) 
    at com.example.config.PlatformConfigService.getById(PlatformConfigService.java:71) 
    at com.example.user.ConfigBasedRole.getPlatformConfig(ConfigBasedRole.java:43) 
    at com.example.user.BranchRole.getBranch(BranchRole.java:55) 
    at com.example.spring.controller.BaseController.getBranch(BaseController.java:177) 
    at com.example.item.search.SearchController.getObjComfortSearchParameters(SearchController.java:361) 
    at com.example.item.search.SearchController.getObjSearchParametersForType(SearchController.java:344) 
    at com.example.item.search.SearchController.getObjSearchParameters(SearchController.java:316) 
    at com.example.item.search.SearchController.tireSearch(SearchController.java:72) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:869) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:775) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:981) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:915) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:726) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:394) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311) 
    at com.example.i18n.UrlLocaleFilter.doFilter(UrlLocaleFilter.java:199) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at com.example.user.PasswordJailFilter.doFilter(PasswordJailFilter.java:72) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:155) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:157) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at com.example.spring.controller.PragmaFilter.doFilter(PragmaFilter.java:42) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:123) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at com.example.data.IpAddressFilter.doFilter(IpAddressFilter.java:70) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.... 

Die gerufene, gecached Methode sieht wie folgt aus:

@Repository 
class PlatformConfigRepository 
{ 
    ... 

    @Cacheable("PlatformConfigRepository::getAll") 
    public Map<Integer, PlatformConfig> getAll() 
    { 
     return something(); 
    } 

    ... 
} 
+1

Können Sie Ihre '@ CacheAble' Bean/Methode zeigen. Auch ein Stack-Trace innerhalb der zwischengespeicherten Methode (mit und ohne '@ EnableIntegration' wäre hilfreich. –

+0

Danke, ich habe meinen ursprünglichen Beitrag aktualisiert und sowohl Stack-Traces als auch das Skelett einer Beispielmethode' @ Cacheable' hinzugefügt. – einherjer

Antwort

1

ich es mit diesem einfachen Boot-App nicht reproduzieren kann ...

@SpringBootApplication 
@EnableCaching 
@EnableIntegration 
public class So45939192Application implements CommandLineRunner { 

    public static void main(String[] args) { 
     SpringApplication.run(So45939192Application.class, args); 
    } 

    @Bean 
    public Bar foo() { 
     return new Foo(); 
    } 

    @Autowired 
    private Bar foo; 

    @Override 
    public void run(String... arg0) throws Exception { 
//  System.err.println(foo.getClass()); 
     System.err.println(foo.foo("x")); 
     System.err.println(foo.foo("x")); 
     if (this.foo.getCalls() > 1) { 
      throw new RuntimeException("Cache disabled"); 
     } 
    } 

    public interface Bar { 

     String foo(String in); 

     int getCalls(); 

    } 

    public static class Foo implements Bar { 

     public int calls; 

     @Override 
     @Cacheable(cacheNames = "cache") 
     public String foo(String in) { 
//   System.err.println("here"); 
//   new RuntimeException().printStackTrace(); 
      this.calls++; 
      return "foo"; 
     } 

     @Override 
     public int getCalls() { 
      return this.calls; 
     } 

    } 

} 

Das Problem könnte durch eine verursacht werden Ändern Sie in der Reihenfolge, dass BeanPostProcessor s laufen (Ich sehe, Sie verwenden auch Transaktionen). Sie müssten die Protokollierung für org.springframework aktivieren und die Schritte zum Erstellen des Anwendungskontexts vergleichen.

Übrigens ist es im Allgemeinen besser, wenn Ihre cachefähige Klasse eine Schnittstelle implementiert, so dass ein JDK-Proxy anstelle eines CGLib-Proxys verwendet werden kann. Mein Verständnis ist, dass Sie proxyTargetClass=true auf @EnableCaching benötigen, wenn es keine Schnittstelle gibt.

0

Vielen Dank Garry. Ich weiß nicht, was das Problem ist/war, aber ich konnte es umgehen, indem ich die @EnableIntegration aus der Klasse OrderIntegrationConfiguration entfernte und sie zu MyConfig hinzufügte.

Ich habe auch proxyTargetClass=true gesetzt, aber es behebt das Problem nicht.

Ich untersuche noch, ob eine @Ordered Annotation auf beiden Konfigurationen dieses Problem auch beheben kann.

Update 2018-01-09: Leider konnte ich dieses Problem nicht beheben, und so musste ich aufgrund des Termins meines Projekts auf eine "manuelle" Weise ausweichen, die das sicherlich großartige Spring Integration Framework ausschloss.

Verwandte Themen