可以为 createOrUpdate 方法放置 @CachePut 注释吗?

Can @CachePut annotation be put for createOrUpdate method?

我有点怀疑 -

我的服务层中有一个方法,如果该 ID 不存在则创建记录,如果存在则更新记录。我可以在方法上加上@CachePut 注释吗?或者我是否也应该在上面加上 @Cacheable 注释

在这种情况下,您想在执行创建或更新的服务方法上使用 @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 将在执行 createOrUpdate(:Customer) 之前在命名缓存中执行 后备 。如果具有 ID 的客户已存在于命名缓存中,则 Spring 将 return "cached" Customer;在这种情况下,Spring 将不会执行 create/update 方法。

然而,如果识别的Customer不存在(或无效),Spring继续执行createOrUpdate(:Customer)方法,然后缓存方法的结果。

@CachePut情况下,Spring会一直执行createOrUpdate(:Customer)方法。也就是说,Spring 不会在执行该方法之前执行旁视以确定 Customer 是否存在,这很可能是 create/update.

情况下您想要的

无论如何,可以在 Reference Guide. In particular, have a look at the @CachePut docs and compare that with the @Cacheable docs.

中找到有关基于声明的缓存的更多信息

希望这对您有所帮助! -约翰