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

@cacheEvict not working while calling the method from different controller

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

我想使用方法缓存,为此我配置了 spring 缓存。

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

所以缓存工作正常,但逐出不按我想要的方式工作。

所以如果我从 controller1 调用 method1(可缓存方法),它将缓存并从 controller1 调用 method2(cacheEvict 方法),然后它将正确删除/逐出 cachce 但是当我从 controller2 调用 method2(cacheEvict 方法)时,它是不是删除/删除缓存,但我希望它这样做。

我想在每次调用方法时逐出/删除缓存,这与从哪个控制器调用它无关。

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

有两个要点导致此操作出错。他们是:

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

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

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

    解决方案: 将 dwr 集成到 DispatcherServlet 中,如 dwr 站点中所定义,以与 springMVC 应用程序集成(我们采用了另一种方式)