Spring @Cachable更新数据

Hor*_*lea 2 java database spring caching

来自的示例:SpringSource

@Cacheable(value = "vets")
public Collection<Vet> findVets() throws DataAccessException {
    return vetRepository.findAll();
}
Run Code Online (Sandbox Code Playgroud)

究竟如何findVets()工作?

这是第一次,它从中获取数据vetRepository并将结果保存在缓存中。但是,如果在数据库中插入了新的兽医,会发生什么?缓存是否会更新(即席即用的行为)?如果没有,我们可以将其配置为更新吗?


编辑:

但是,如果从外部源(例如,使用同一数据库的应用程序)更新数据库,会发生什么?

a b*_*ver 5

@CacheEvict("vets")    
public void save(Vet vet) {..}
Run Code Online (Sandbox Code Playgroud)

您必须告诉缓存对象是陈旧的。如果在不使用服务方法的情况下更改数据,那么您当然会遇到问题。但是,您可以使用以下命令清除整个缓存

@CacheEvict(value = "vets", allEntries = true)    
public void clearCache() {..}
Run Code Online (Sandbox Code Playgroud)

它取决于缓存提供程序。如果另一个应用程序在不通知您的应用程序的情况下更新了数据库,但它使用了相同的缓存,则另一个应用程序也可能会更新缓存。