我有一个小疑问 -
我的服务层中有一个方法,如果该ID不存在则创建记录,如果存在则更新记录。我可以在方法上加上@CachePut注释吗?或者我也应该在其上放置@Cacheable anotation
答案 0 :(得分:1)
在这种情况下,您希望在执行创建或更新的服务方法上使用@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的Customer已经存在于指定的缓存中,那么Spring将返回"缓存的#34; Customer
;在这种情况下,Spring不会执行create / update方法。
但是,如果标识的Customer
不存在(或无效),则Spring继续执行createOrUpdate(:Customer)
方法,然后缓存方法的结果。
在@CachePut
的情况下,Spring将始终执行createOrUpdate(:Customer)
方法。也就是说,在执行方法之前,Spring不会执行调查以确定客户是否存在,这很可能是创建/更新时的所需。
无论如何,有关基于声明的缓存的更多信息可以在Reference Guide中找到。请特别注意@CachePut
docs并将其与@Cacheable
docs进行比较。
希望这有帮助! -John