логика есть, SomeImpl извлечет ~ 15 записей из БД, которые будут отправлены в mapper, mapper отфильтрует ~ 5 полей из 15, затем установит эти 5 значений в Dto.
, что вам нужно указать заранее
Извлечение 15 записей из БД занимает 10 секунд ... это слишком много.Я все еще предполагаю, что проблема где-то еще, пока вы не докажете обратное
Здесь мы будем предполагать, что параллельная обработка поможет вам (переключение и управление потоками займет меньше, чем каждая операция).Обратите внимание, что параллельное чтение данных из базы данных может помочь вам меньше, чем вы ожидаете.Другими словами - это то, как выполнять операции параллельно, но я все еще не верю, что это решит вашу проблему.
Вы действительно можете прочитать ресурсы из комментария
Решениебудет использовать CompleatableFuture для извлечения деталей и установки их в dto.Проверьте Руководство по CompletableFuture для подробностей - Валентин Карну
Вы можете использовать службу исполнителя с фиксированным пулом потоков
private static final ExecutorService fetchService = Executors.newFixedThreadPool(threadCount);
Отправить свои задачи
final Mydto myDto =new MyDto();
Collection<Future> futures = ...
futures.add(fetchService.submit(() -> { myDto.setSometing(...); }));
futures.add(fetchService.submit(() -> { myDto.setSometingElse(...); }));
// wait until all completes assuming no other thread submit tasks
futures.forEach(f->{f.get();});
Я написал это из своей головы без правильной проверки синтаксиса, но у вас должна быть идея