DS
method1(){
...
ExecutorService executor = Executors.newFixedThreadPool(3);
for (String url: urlList){
executor.submit(
() -> {
//byte[] byteImage = getImage(url)
//save in file system (byteImage)
//save in DB (byteImage)
//save in redis (byteImage)
}
)}
...
}
public byte[] getImage(String url) {
byte[] result = null;
try {
webClient
.get()
.uri(url)
.header("X-Requested-With", "XMLHttpRequest")
.exchange()
.flatMap(response -> {
if (!response.statusCode().is2xxSuccessful()) {
return Mono.error(new RuntimeException("Internal server error"));
} else {
return response.bodyToMono(ByteArrayResource.class);
}
}).map(ByteArrayResource::getByteArray)
.block();
} catch (Exception e) {
log.warn("can't take image {}", url);
}
return result;
}
В другом потоке вызываю executor.shutdownNow()
Если у webclient убираю #block - все хорошо - потоки прерываются и процесс останавливается
Но когда у webclient стоит #block - потоки не останавливаются ((( - block не дает остановится (такое чувство что он сбрасывает флаг interrupted)