Можно ли разместить аннотацию @CachePut для метода createOrUpdate? - PullRequest
0 голосов
/ 18 мая 2018

У меня было небольшое сомнение -

У меня в слое сервиса есть метод, который либо создает запись, если этот идентификатор отсутствует, либо обновляет запись, если она есть.Могу ли я просто добавить аннотацию @CachePut к методу?Или я должен также добавить аннотацию @Cacheable на нее

1 Ответ

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

В этом случае вы хотите использовать @CachePut в вашем сервисном методе, выполняющем создание или обновление.Например ...

Предполагая ...

class Customer {

  @Id
  Long id;

  ...
}

И учитывая ...

@Service
class CustomerService {

  CustomerRepository customerRepository;

  @CachePut("Customers", key="#customer.id")
  Customer createOrUpdate(Customer customer) {
    // validate customer
    // any business logic or pre-save operations
    return customerRepository.save(customer);
  }
}

@Cacheable собирается выполнить look-в сторону в именованном кэше перед выполнением createOrUpdate(:Customer).Если Клиент с идентификатором уже существует в именованном кэше, Spring возвратит «кэшированный» Customer;Spring не будет выполнять метод создания / обновления в этом случае.

Однако, если идентифицированный Customer не существует (или недействителен), Spring продолжает выполнять метод createOrUpdate(:Customer) и затем кэширует результатметода.

В случае @CachePut Spring всегда будет выполнять метод createOrUpdate(:Customer).То есть Spring не будет выполнять просмотр в сторону, чтобы определить, существует ли Customer перед выполнением метода, что, скорее всего, то, что вам нужно в случае создания / обновления.

В любом случае, больше информации о декларативномКэширование на основе можно найти в Справочном руководстве .В частности, посмотрите на @CachePut документы и сравните это с @Cacheable документами .

Надеюсь, это поможет!-John

...