Многократная вставка в одной транзакции с использованием многопоточности

#multithreading #spring-data-jpa #spring-transactions

Вопрос:

Я использую springboot Jpa и пометил метод как транзакционный. В транзакционном методе имеется несколько вставок, которые не зависят друг от друга.

Я пытаюсь повысить производительность, используя несколько потоков внутри транзакционного метода, но транзакционное поведение теряется, когда я это сделал. Не могли бы вы, пожалуйста, предложить способ добиться такого поведения.

 @Transactional
methodA(){

    repo1.save(A)
    repo2.save(B)
    repo3.save(C)
    repo4.save(D)

}
 

Я хочу запустить эти операции сохранения в разных потоках, но в одной транзакции.

Комментарии:

1. Используйте TransactionTemplate для программного управления tx. Но многопоточность, скорее всего, не улучшит производительность в этом сценарии.

2. Можете ли вы предложить что-то, что может помочь в повышении производительности

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

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

5. Что вы имеете в виду, говоря, что он работает в одном потоке? Это вызывается вашим контроллером->Службой? Затем он вызывается пользовательскими потоками. И 15 операторов вставки должны завершиться быстро, вероятно, менее чем за полсекунды..