Я начинаю изучать абстракцию Spring Cache.
Для этой цели я использую Spring boot, Spring Data Jpa, провайдер EhCache.
Мой ehcache.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ehcache>
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache maxElementsInMemory="100"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true">
</defaultCache>
<cache name="teams"
maxElementsInMemory="500"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="100"
overflowToDisk="false">
</cache>
Мой сервис:
@CacheConfig(cacheNames = "teams")
@Service
public class TeamService {
@Autowired
private TeamRepository teamRepository;
@Cacheable
public Team findById(long id) {
return teamRepository.findById(id).get();
}
@Cacheable
public List<Team> findAll() {
return teamRepository.findAll();
}
@CachePut
public Team save(Team team) {
return teamRepository.save(team);
}
@CacheEvict
public void delete(long id) {
teamRepository.deleteById(id);
}
}
Мой контроллер:
@RestController
public class TeamController {
@Autowired
private TeamService teamService;
@GetMapping("/teams")
public List<Team> getAll() {
return teamService.findAll();
}
@GetMapping("/team/{id}")
public Team getById(@PathVariable long id) {
return teamService.findById(id);
}
@DeleteMapping("/team/{id}")
public void delete(@PathVariable long id) {
teamService.delete(id);
}
@PostMapping("/team")
public Team save(@RequestBody Team team) {
return teamService.save(team);
}
}
Я выполняю запросы к своему контроллеру ...
Когда я выполняю метод getAll () контроллера, данные кешируются правильно, а затем не выполняются запросы к базе данных в следующий раз. Затем я обновляю и удаляю данные из базы данных, используя соответствующие методы моего контроллера, методы обслуживания которых помечены как @CachePut и @CacheEvict соответственно и должны обновлять кэш. Затем я снова выполняю приведенный выше метод getAll () и получаю тот же ответ, что и в первый раз, но я хочу, чтобы он обновлялся после выполнения запросов на удаление и обновление.
Что я делаю не так или как я могу получить желаемый результат?