Я пытаюсь поразить API и загрузить данные в кеш при запуске приложения. Код работает локально, и я вижу, что кеш есть, но при развертывании на сервере я вижу журналы, которые печатаются для кеширования, но он не дает данные.
@Service
@CacheConfig(cacheNames = { "sampleData" })
public class TestService
{
private static final String API = "LInk to some API the data of which need to be cached."
private static final RestTemplate restTemplate = restTemplate();
@Getter
public static Map<String, String> testCountry = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
@Autowired
TestService()
{
}
@PostConstruct
private static void getCountryData()
{
testCountry = TestService.code();
log.info("Caching completed.");
}
public static Map<String, String> code()
{
log.info("Caching is invoked {} ", API);
Map<String, String> map = new TreeMap<>();
try
{
ResponseEntity<SampleCountry[]> responseEntity = restTemplate
.getForEntity(API
, SampleCountry[].class);
List<SampleCountry> SampleCountryList = Arrays.asList(responseEntity.getBody());
map = SampleCountryList.stream()
.collect(Collectors.toMap(SampleCountry::getCode, SampleCountry::getName));
}
catch (HttpClientErrorException | HttpServerErrorException httpClientOrServerExc)
{
log.error("Error {} ",
httpClientOrServerExc.getStatusCode());
}
return map;
}
@Bean
public static RestTemplate restTemplate()
{
RestTemplate restTemp = new RestTemplate();
((SimpleClientHttpRequestFactory) restTemp.getRequestFactory()).setConnectTimeout(CONNECTION_TIMEOUT);
((SimpleClientHttpRequestFactory) restTemp.getRequestFactory()).setReadTimeout(CONNECTION_TIMEOUT);
return restTemp;
}
}
И я вызываю то же самое из другого класса.:
String countryName = Optional.ofNullable(TestService.testCountry).map(m -> m.get(code))
.orElse(code);
CountryName извлекает данные из кэша.