0
저는 Spring Boot 응용 프로그램을 실행 중이며 MongoRepository를 호출하는 여러 스레드가 있습니다. 그러나 이로 인해 이상한 시간 초과 동작이 발생합니다. Executor 서비스를 MongoRepository로 호출하면 완료되지 않습니다.
public interface EquipmentRepository extends MongoRepository<Equipment, String> {
Optional<Equipment> findByEquipmentSerialNumber(String equipmentSerialNumber);
}
이
내 코드의 축소 버전이 출력 생산 이ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
taskExecutor.execute(() -> {
LOG.info("Executing query...");
Optional<Equipment> equipment = equipmentRepository.findByEquipmentSerialNumber("21133"); // guaranteed to be found
LOG.info("Query done: {}", equipment.get().getEquipmentSerialNumber());
});
taskExecutor.shutdown();
LOG.info("taskExecutor shut down");
try {
taskExecutor.awaitTermination(30, TimeUnit.SECONDS);
LOG.info("taskExecutor done");
} catch (InterruptedException e) {
System.out.println("Error");
}
내가 늘리면이
taskExecutor shut down
Executing query...
<30 second pause>
taskExecutor done
Query done: 21133
과 같은 문제를 강조한다 :
이
내 MongoRepository입니다 awaitTermination()의 타임 아웃은 그에 따라 증가합니다. 그래서 어떻게 든 내 execute() 람다 내 코드는 "일시 중지"이며 시간 제한에 도달 한 후에 만 계속됩니다.equipmentRepository에 대한 호출을 제거하면 모든 것이 예상대로 작동하며 30 초의 일시 중지가 없습니다.
시간 초과에 도달하지 않고 코드가 완료되지 않도록하려면 어떻게해야합니까? 봄 데이터 비동기가 doc
를 요청 할 수 있습니다 : 몽고의 저장소 문제에 대한가 특정 질문에 대한 대답하지 쿼리 (하지만 매우 이상), 그러나 아마 솔루션을 수행 할 '주'스레드를 대기처럼