Spring 4.3 および Java 8 Spring を構成済み
@Repository
public class EmployeeRepostiry {
@Async
public CompleteableFuture<StatusVO> getEmployee(String id) {
StatusVo status = new StatusVO();
return CompletableFuture.completedFuture(status);
}
}
CallingService cclass:
@Service
public class EmployeeService {
@Autowired public EmployeeRepostiry employeeReporsitory;
public List<StatusVO> getEmployee(List<String> ids) {
List<StatusVo> returnStatus = new ArrayList<StatusVO>();
List<CompleteableFuture<StatusVO>> statsuss = new ArrayList<CompleteableFuture<StatusVO>>();
for(String id: ids) {
statsuss.add(employeeReporsitory.getEmployee(id));
}
try {
CompletableFuture.allOf(statsuss.toArray(new CompletableFuture[statsuss.size()])).join();
} catch(Exception e){
e.printstacktracce();
}
Logger.debug("not coming to this line"); //Not coming here
returnStatus = statsuss.stream().map(completableStatus -> {
ServiceActionStatusVO statusVO = null;
try {
statusVO = completableStatus.get();
} catch (InterruptedException | ExecutionException e) {
statusVO = new StatusVO();
statusVO.setStatus(Constants.ERROR);
statusVO.setStatusText(e.getMessage());
LOGGER.error("Failed on the state of execution ",e);
}
return statusVO;
}).collect(Collectors.toList());
return returnStatus ;
}
}
非同期は正常に実行され、非同期スレッドでも実行され、すべての ID が完了しています。しかし、結合後にハングし、すべての非同期タスクが作成された後、ステートメントは来ていませんjoin();
。一般的な例外をキャッチしようとしましたが、何も返されませんでした