Как кешировать многопоточные вызовы API в java с помощью okhttp? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть несколько потоков, вызывающих один и тот же API с разными параметрами.Я хочу кешировать это.Использование кэша в ohttp приводит к следующей ошибке.

java.io.IOException: failed to rename C:\Regression360\jiracache\journal to C:\Regression360\jiracache\journal.bkp

Я считаю, что это известная ошибка в okhttp.

Мой код для клиента:

private int cacheSize = 10 * 1024 * 1024; 
private String cacheFileName = "C:\\Regression360";
\*not relevant parts skipped\*
OkHttpClient client = new OkHttpClient.Builder()
             .cache(cache)
             .addNetworkInterceptor(provideCacheInterceptor())
             .sslSocketFactory(trustAllSslSocketFactory, (X509TrustManager) trustAllCerts[0])
            .retryOnConnectionFailure(true).connectionSpecs(Collections.singletonList(spec)).build();

Interceptor provideCacheInterceptor () {
        return new Interceptor() {
            @Override
            public Response intercept (Chain chain) throws IOException {
                Response response = chain.proceed( chain.request() );
                CacheControl cacheControl = new CacheControl.Builder()
                        .maxAge( 2, TimeUnit.MINUTES )
                        .build();
                return response.newBuilder()
                        .header("Cache-Control", cacheControl.toString() )
                        .build();
            }
        };
    }

Есть ли что-то, что я здесь скучаю?Можно ли кешировать многопоточные звонки?

...