Короче говоря, когда @CacheEvict вызывается по методу, и если ключ для записи не найден, Gemfire бросает EntryNotFoundException.Gemfire EntryNotFoundException для @CacheEvict
Теперь подробно,
У меня есть класс
class Person {
String mobile;
int dept;
String name;
}
У меня есть две области кэша, определенные как personRegion и personByDeptRegion и службы, как показано ниже
@Service
class PersonServiceImpl {
@Cacheable(value = "personRegion")
public Person findByMobile(String mobile) {
return personRepository.findByMobile(mobile);
}
@Cacheable(value = "personByDeptRegion")
public List<Person> findByDept(int deptCode) {
return personRepository.findByDept(deptCode);
}
@Caching(
evict = { @CacheEvict(value = "personByDeptRegion", key="#p0.dept"},
put = { @CachePut(value = "personRegion",key = "#p0.mobile")}
)
public Person updatePerson(Person p1) {
return personRepository.save(p1);
}
}
Когда есть вызовите updatePerson, и если в personByDeptRegion нет записей, это вызовет исключение, которое EntryNotFoundException для ключа 1 (или что-то еще является кодом dept) , Существует очень хороший шанс, что этот метод будет вызван до вызова методов @Cacheable и будет избегать этого исключения. Можно ли каким-либо образом изменить поведение Gemfire, чтобы изящно вернуться, когда ключ не существует для данного региона? В качестве альтернативы, я также хочу знать, есть ли более эффективная реализация описанного выше сценария с использованием Gemfire в качестве кеша.
Spring Data Gemfire: 1.7.4
Gemfire Версия: v8.2.1
Примечание: Приведенный выше код только для представления цели и у меня есть несколько служб с той же проблемой в реальном проекте.
Wow! Вы должны рассмотреть возможность обновления вашей версии SDG! 1.3.5.RELEASE? o.O Вы понимаете, что «1.8.4.RELEASE» - самая последняя версия (на основе GF 8.2.0). 1.7.6.RELEASE - поддерживаемая в настоящее время версия обслуживания (на основе GF 8.1.0). И SDG 1.9 в настоящее время находится в разработке, с уже имеющимся 1,9 M1 и 1,9 GA запланировано на 12 декабря. Вы можете оставаться в курсе, просматривая страницу проекта SDG (http://projects.spring.io/spring-data-gemfire/) ... –
... а также взгляните на страницу Wiki-страницы совместимости проекта (https : //github.com/spring-projects/spring-data-gemfire/wiki/Spring-Data-GemFire-to-GemFire-Version-Compatibility). Кроме того, вы можете просмотреть сведения о выпуске на странице Wiki Wiki (https://github.com/spring-projects/spring-data-commons/wiki); см. столбец Nav справа. Текущие выпуски Gosling (SDG 1.7.6.RELEASE) & Hopper (SDG 1.8.4.RELEASE). Ингаллс (https://github.com/spring-projects/spring-data-commons/wiki/Release-Train-Ingalls) подходит и подходит. –
Сказав это ... Я немного поработаю с ответом на ваш вопрос. –