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