Spring Redis Cache не выселяется
Следующие работы (приводят к выселению):
fooController {
@ApiEndpoint
public delete(id) {
fooService.deleteFoo(id)
}
}
fooService {
@CacheEvict(value = "cache1", key = "#id")
public void deleteFoo(Long id) {
//delete logic here
}
}
Но это не работает (из кеша ничего не вытесняется):
fooController {
@ApiEndpoint
public delete(name) {
fooService.deleteFoo2(name)
}
}
fooService {
public void deleteFoo2(String name) {
//delete logic here
deleteFoo(name.getId())
}
@CacheEvict(value = "cache1", key = "#id")
public void deleteFoo(Long id) {
//delete logic here
}
}
Почему мои аннотации @CacheEvict вызываются только тогда, когда метод вызывается прямо из контроллера?
Я использую Redis в качестве механизма кеширования.
2 ответа
Aop не беспокоится, когда ваш метод вызывается внутри класса. Он работает, когда метод вызывается другим классом. Таким образом, вы можете определить deleteFoo в другом сервисе.
Чтобы сделать перехват весеннего аспекта
@Cache*
аннотации вы должны сделать внешний вызов. Если вам не нравится вызывать этот метод из другого объекта, используйте подход с самовызовом компонента . В этом случае ваш класс представлен как два объекта, и один вызывает другой:
@Resource private FooController thisBean;
public delete(id) {
thisBean.deleteFoo(id)
}
@CacheEvict(value = "cache1", key = "#id")
public void deleteFoo(Long id) {}