@cacheEvict在从不同控制器调用方法时不工作

时间:2015-01-08 14:38:41

标签: java spring caching spring-cache

在spring应用程序中,我们有两个控制器,即controller1,controller2和一个服务,即service1

我想使用方法缓存,因为我配置了弹簧缓存。

我正在使用@Cacheable(value = "cache1")在service1中缓存名为method1的方法,并且在service1中另一个名为method2的方法中使用@CacheEvict(value = "cache1", allEntries = true)删除缓存。

因此缓存工作正常,但驱逐不按我的意愿工作。

所以,如果我从controller1调用method1(cachable方法),它将缓存并从controller1调用method2(cacheEvict方法)然后它将正确地删除/逐出ccuce但是当我从controller2调用method2(cacheEvict方法)然后它不是REMOVING / EVICTING CACHE但我想要这样做。

我希望每次调用方法时都要逐出/删除缓存,这与调用哪个控制器无关。

这在大多数情况下是必需的,因为controller1用于客户,而controller2用于管理员。我们缓存controller1中使用的方法,我们希望在从controller2发生任何更新时删除相同的缓存,即admin。

1 个答案:

答案 0 :(得分:0)

使这个错误的两个要点。他们是:

  1. 在Controller中,我们使用注释@autowire,在服务中我们使用xml bean configuration。所以两者都在创建不同的实例,这使它工作错误。

    解决方案:对于控制器而言,我们在xml中的定义方式与我们对服务的方式相同。

  2. 我们在spring中集成了dwr(directwebremoting),但没有在Spring的DispatcherServlet中集成,所以它可以独立工作,因此服务实例也是不同的。

    解决方案:在dwr网站中定义DispatcherServlet中的集成dwr,以便与springMVC应用程序集成(我们采取了另一种方式)