使用具有以下配置的spring batch调用Itemprocessor内部的CompletableFuture内部的API时发生异常。 代码段是,我正在对ItemReader,ItemProcessor和ItemWriter使用批处理步骤,
@Bean
public Step batchStep() {
return stepBuilderFactory.get("batchStep").<String, ProcessorData>chunk(10)
.reader(reader()).processor(processor()).writer(writer())
.listener(batchStepListener())
.taskExecutor(taskExecutor())
.build();
}
@Bean
public TaskExecutor taskExecutor() {
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.setConcurrencyLimit(50);
return taskExecutor;
}
在ItemProcessor内部,我将使用CompletableFuture进行另外4个操作以执行特定用例,并将CompletableFuture.allOf(..)返回给ItemWriter,在其中提取各个状态并提交给数据库。下面是ItemProcessor片段,
@Override
public ProcessorData process(String tenant) {
CompletableFuture<String> operationA = operation.fetchA(tenant);
CompletableFuture<String> operationB = operation.fetchB(tenant);
CompletableFuture<String> operationC = operation.fetchC(tenant);
CompletableFuture<String> operationD = operation.fetchD(tenant);
CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(operationA, operationB, operationC,
operationD);
return new ProcessorData(operationA, operationB, operationC, operationD, idmeventsBackup,
combinedFuture);
}
异常如下,
org.springframework.web.client.ResourceAccessException: I/O error on DELETE request for <URL>:
Timeout waiting for connection from pool; nested exception is
org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:744)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:579)