@cacheEvict не работает при вызове метода с другого контроллера

В приложении Spring у нас есть два контроллера, то есть controller1, controller2 и одна служба, то есть service1

Я хочу использовать кеширование методов, и для этого я настроил весенний кеш.

Я кэширую метод с именем method1 в service1 с помощью @Cacheable(value = "cache1"), а для удаления кеша я использую @CacheEvict(value = "cache1", allEntries = true) для другого метода с именем method2 в service1.

поэтому кеширование работает нормально, но выселение не работает так, как я хочу.

поэтому, если я вызываю метод1 (метод cachable) с контроллера 1, он будет кэшировать и вызывать метод 2 (метод cacheEvict) с контроллера 1, тогда он удалит / выселит cachce должным образом, НО когда я вызываю метод 2 (метод cacheEvict) с контроллера 2, тогда он НЕ УДАЛЯЕТ / УДАЛЯЕТ КЭШ но Я ХОЧУ ЭТО СДЕЛАТЬ.

Я хочу выселять / удалять кеш каждый раз, когда вызывается метод, независимо от того, с какого контроллера он вызывается.

это требуется в большинстве случаев, потому что контроллер 1 предназначен для клиента, а контроллер 2 - для администратора. мы кэшируем методы, используемые в контроллере1, и мы хотим удалить тот же кеш, когда любое обновление происходит с контроллера2, то есть с администратора.


person murtaza.webdev    schedule 08.01.2015    source источник
comment
Убедитесь, что существует один экземпляр службы, похоже, что существует несколько экземпляров.   -  person M. Deinum    schedule 08.01.2015
comment
@ M.Deinum, да, это проблема с экземпляром, но не могу понять, как ее решить. можешь мне помочь?   -  person murtaza.webdev    schedule 09.01.2015


Ответы (1)


Два основных момента, из-за которых это работает неправильно. Они есть :

  1. В контроллере мы используем аннотацию @autowire, а в службах - xml bean configuration. поэтому оба создают разные экземпляры, и это делает его неправильным.

    Решение: для контроллера мы также определили в xml так же, как и для служб.

  2. мы интегрировали dwr (directwebremoting) весной, но не в DispatcherServlet Spring, поэтому он работает, но независимо, поэтому для этого экземпляра служб также разные.

    Решение. Встроенный dwr внутри DispatcherServlet, как определено на сайте dwr, для интеграции с приложением springMVC (мы сделали другой способ)

person murtaza.webdev    schedule 12.01.2015