У меня есть метод findAll()
, который возвращает всю специальность из BD, в этом методе я помещаю аннотацию @Cacheable
, чтобы получить данные из кеша, проблема в том, что когда я выполняю /specialities
API, первыйраз я получаю правильные данные, когда я выполняю API во второй раз, я получаю данные с нулевыми идентификаторами
@Service
@CacheConfig(cacheNames = ServiceConstant.SPECIALITY)
public class SpecialityServiceImpl implements SpecialityService {
@Autowired
private SpecialitySearchRepository specialitySearchRepository;
@Autowired
private SpecialtyMapper specialityMapper;
@Override
@Cacheable
public List<SpecialityDTO> findAll() {
return specialitySearchRepository.findAll().stream().map(specialityMapper::toDto)
.collect(Collectors.toCollection(LinkedList::new));
}
}
@RestController
public class SpecialityResource {
@Autowired
private SpecialityService specialityService;
@GetMapping("/specialities")
public List<SpecialityDTO> getAllSpecialitys() {
return specialityService.findAll();
}
}
Config
@Configuration
@EnableCaching
public class CacheConfiguration {
private static final String HAZELCAST_LOGGING_TYPE = "hazelcast.logging.type";
@Bean
public Config hazelCastConfig() {
return new Config().setInstanceName("cache")
.addMapConfig(
new MapConfig().setName(ServiceConstant.SPECIALITY)
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU).setTimeToLiveSeconds(100))
.setProperty(HAZELCAST_LOGGING_TYPE, "none");
}
}