CacheConfig работает в локальной системе, но при развертывании на сервере он не работает - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь поразить 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 извлекает данные из кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...