У меня есть хранилище данных Spring Data Rest, которое я бы хотел использовать с Spring Caching.Весенний кэш с хранилищем данных Spring Data хранит результаты кэширования с исключением по исключению
Кэш работает должным образом, если ошибок нет. Однако, когда результатом сохранения является исключение проверки, объект кэшируется, хотя он не записывается в базу данных.
SDR Repository
@RepositoryRestResource(collectionResourceRel = "businessUnits", path = "businessUnits")
public interface BusinessUnitRepository extends JpaRepository<BusinessUnit, UUID> {
@Override
@Cacheable(value = "lookups", cacheManager = "vaultCache")
BusinessUnit findOne(final UUID id);
@Override
@CacheEvict(value = "lookups", cacheManager = "vaultCache", allEntries = true, beforeInvocation = true)
BusinessUnit save(BusinessUnit entity);
Если я POST тело сообщения ниже новой бизнес-единицы она сохраняется правильно. Первый GET для извлечения записи попадает в базу данных, как ожидалось, и последующие GET поступают из кеша.
{
"name": "Test_Business_2",
"effectiveDate": "2019-12-16T11:11:11.111+0000",
"expirationDate": "2020-12-16T11:11:11.111+0000",
"businessUnitType": "/businessUnitTypes/38faf33c-5454-4245-bc69-2b31e510fa6b"
}
Объект BusinessUnit имеет значение null в поле effectiveDate.
@NotNull
@Column(name = "effective_date")
private Timestamp effectiveDate;
Когда я PATCH бизнес-единицы с нулевой эффективностью. Ответ - ошибка, исключение регистрируется и база данных не обновляется.
{
"effectiveDate": null
}
Когда я запроса дб, я вижу, что запись не была обновлена
NAME EFFECTIVE_DATE EXPIRATION_DATE
Test_Business_2,2019-12-16 06:11:11,2020-12-16 06:11:11
Однако, когда я делаю GET на конечной точке businessUnits. База данных не попадает, чтобы прочитать запись, и возвращается null effectiveDate.
{
"createDate": "2017-02-20T13:38:00.386+0000",
"lastModifiedDate": "2017-02-20T13:38:00.386+0000",
"effectiveDate": null,
"expirationDate": "2020-12-16T11:11:11.111+0000",
"name": "Test_Business_2", ...
Таким образом, похоже, что данные, вызвавшие выброс исключения, хранятся в кеше.
Что нужно изменить, чтобы значение не сохранялось в кеше, когда база данных не обновляется при сохранении?
Я ценю любую помощь или совет. Благодарю.
Я не нашел решение моей проблемы, но я нашел работу. В случае, когда я вижу ошибку, генерируется исключение, но кеш не выдается. В методе, который обрабатывает исключение, я могу программно очистить кеш. Кэш-кеш = cacheManager.getCache ("lookups"); cache.clear(); Затем кеш очищается и не содержит значения «исключения». –