Асинхронное выполнение базы данных с использованием Spring-Boot и Spring-JPA - PullRequest
0 голосов
/ 30 марта 2020

Я использую версию 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);

}

...