我正在尝试在单个方法上调用@CacheEvict和@Cacheable注释。
@CacheEvict(value = "tripDetailsDashboardCache", key = "#userId")
@Cacheable(value ="tripDetailsDashboardCache", key="#userId")
public List<DashBoardObject> getAllDetailsForDashBoard(Integer userId){
List<Master> masters = tripDetailsService.getTripDetailsForCaching(userId);
List<DashBoardObject> dashBoardObject = tripDetailsService.getMasterDetailsForDashBoard(userId, masters);
return dashBoardObject;
}
在调用@CacheEvict时,我想删除特定键的缓存数据,并且我想再次缓存方法响应的新数据。但它没有缓存新数据?而且它没有给出任何错误?。
答案 0 :(得分:2)
@CachePut(value = "tripDetailsDashboardCache", key = "#userId")
public List<DashBoardObject> getAllDetailsForDashBoard(Integer userId){
List<Master> masters = tripDetailsService.getTripDetailsForCaching(userId);
List<DashBoardObject> dashBoardObject = tripDetailsService.getMasterDetailsForDashBoard(userId, masters);
return dashBoardObject;
}
答案 1 :(得分:0)
@CacheEvict在方法调用后默认运行。因此,上面的方法使用键#userId缓存列表,然后完全清除缓存。
它使代码不清楚我建议创建单独的可缓存和缓存驱逐方法
答案 2 :(得分:0)
看看docs。有@Caching注释,您可以在其中定义@Cacheable,@ CachePut和@CacheEvict