Каким образом Spring 4.3 распаковывает дополнительный из кэша, если он был пуст - PullRequest
0 голосов
/ 27 апреля 2018

Моя команда использует аннотацию @Cachable в Spring и кэширует дополнительно <> в Java. Мы только что обновились до Spring 4.3 и начали получать ошибки, потому что кэши не допускают нулевые значения, а Spring разворачивал Optional и пытался вставить нулевое значение, когда оно было пустым.

Я попытался просмотреть документы, но нигде не смог найти объяснения того, как Spring ведет себя, когда он попадает в кэш, находит ноль и должен вернуть Optional <>. Может ли кто-нибудь предоставить некоторый контекст; Будет ли он преобразовывать его в пустой необязательный или будет выдавать любую ошибку?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Я проверил это, и Spring поместит нулевое значение в Необязательный.

0 голосов
/ 27 апреля 2018

Поддержка Optional была добавлена ​​в Spring Cache Abstraction вокруг версии 4.3.3.RELEASE См. Пример в разделе условного кэширования.

Абстракция кэша поддерживает java.util.Optional, используя его содержимое в качестве кэшированного значения, только если оно присутствует. #result всегда относится к бизнес-объекту и никогда не поддерживается поддерживаемой оболочкой, поэтому предыдущий пример можно переписать следующим образом:

@Cacheable(cacheNames="book", condition="#name.length < 32", unless="#result.hardback")
public Optional<Book> findBook(String name)

Обратите внимание, что результат по-прежнему относится к книге, а не необязательно.

Также см. Этот пост .

...