Многопоточность в Spring Boot

У меня есть таблица DynamoDB, в которой у меня более 1000 строк. Мне нужно написать приложение springboot, которое считывает строки таблицы одну за другой и выполняет вызов другой службы, которая принимает по одному JSON за раз. Перебирать таблицу 1 на 1 не кажется оптимальным решением. Можно ли этого добиться с помощью многопоточности, если да, то как это можно сделать? Или у нас есть лучший вариант для этого, может кто-нибудь поможет?

Загляните в ThreadPoolExecutor. Вы можете прочитать все записи из базы данных и добавить каждую как задание в ThreadPoolExecutor, который будет использовать несколько потоков для выполнения вызовов REST.

Jason 17.01.2019 06:42

Попробуйте использовать Spring-Batch с параллельной обработкой. Предполагая, что ваши строки можно читать независимо. docs.spring.io/spring-batch/trunk/reference/html/…

Oomph Fortuity 17.01.2019 06:44

Вместо того, чтобы читать одну строку или все сразу, чтение в пакете с последующим добавлением их в пул было бы еще одним хорошим подходом. В этом случае вы не застрянете из-за сети или поиска огромных данных. Кроме того, сохранение определенного количества потоков также улучшит производительность.

ygbgames 17.01.2019 06:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
6 036
3

Ответы 3

В то время, когда вы можете читать, предположим, N записей за раз, например, из 50, вы можете использовать более 1 потока для чтения записей из базы данных, поскольку вы только читаете, а не пишете, после того, как вы прочитали запись, вы можете создать N номер потоков для вызова внешней службы из ExecutorService, и каждая служба Thread of Executor может иметь данные одной записи, которая будет вызывать эту внешнюю службу

Не могли бы вы привести мне пример или ресурс о том, как это можно сделать?

Kshitiz Sharma 18.01.2019 05:52

Вы можете использовать @async. Это один из самых простых способов выполнения нескольких потоков в Springboot.

Я использую JPA для доступа к БД. Так что мне все равно придется использовать все записи. findAll () и сохраните их в списке. А затем для каждого элемента в списке мне нужно выполнить цикл и сделать остальной вызов, используя этот элемент. Я могу использовать Async для этого вызова. Можно ли получить каждый элемент один за другим асинхронно и сделать остальной вызов, а затем перейти к следующему элементу в базе данных и сделать то же самое

Kshitiz Sharma 18.01.2019 05:48

Интересно то же самое.

Duc Tran 18.10.2019 20:48

Прежде всего, почему вам нужно читать таблицу БД одну строку за другой? у вас может быть только один оператор sql и получить все нужные строки (достигнутые на уровне вашего репозитория, если это приложение для весенней загрузки), а затем использовать многопоточность, как описано другими людьми (@Async, ExecutorService и т. д.) в ваши классы обслуживания.

Другие вопросы по теме