Я использую версию spring-boot-starter-parent 2.1.7.RELEASE вместе с spring-boot-starter-data-jpa и postgresql. Мое требование состоит в том, чтобы передать список строк, содержащих имена пользователей, в бэкэнд, который будет вычисляться асинхронно, если пользователь присутствует в базе данных или нет, и вернуть карту, содержащую имя пользователя, с логическим значением (true, если присутствует, false, если нет ). Пожалуйста, проверьте уровни обслуживания и хранилища ниже. Любые мысли приветствуются.
Сервис
@Async(value="threadPoolTaskExecutor")
public CompletableFuture<Map<String, Boolean>> findIfEmpByFirstNamePresentAsync(List<String> firstNameList) {
Map<String, Boolean> map = new HashMap<String, Boolean>();
firstNameList.stream().forEach(firstName -> {
CompletableFuture<Integer> cfi = CompletableFuture.supplyAsync(() -> {
return employeeRepository.countEmpByFirstName(firstName);
});
try {
map.put(firstName, cfi.get() > 0 ? true : false);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
return CompletableFuture.completedFuture(map);
}
Репозиторий
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
@Query("select count(*) from Employee e where e.firstName like %:firstName%")
public Integer countEmpByFirstName(String firstName);
}