在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。
答案 0 :(得分:0)
使这个错误的两个要点。他们是:
在Controller中,我们使用注释@autowire
,在服务中我们使用xml bean configuration
。所以两者都在创建不同的实例,这使它工作错误。
解决方案:对于控制器而言,我们在xml中的定义方式与我们对服务的方式相同。
我们在spring中集成了dwr(directwebremoting),但没有在Spring的DispatcherServlet中集成,所以它可以独立工作,因此服务实例也是不同的。
解决方案:在dwr网站中定义DispatcherServlet中的集成dwr,以便与springMVC应用程序集成(我们采取了另一种方式)