Wpis z mikrobloga

#programowanie #spring #java
Potrzebuję wykonać n (dynamiczny parametr, ale powiedzmy < 30) niezależnych od siebie 'ciężkich' zadań (baza, http) w jednym requeście i odesłać zbiorczy wynik (nie ma możliwości zrobienia tego za jednym razem). W jaki sposób zrobić to najefektywniej?

Z tego, co po znalazłem w Internecie wymyśliłem coś takiego:
1) Controller odbiera żądanie i oddelegowuje zadanie do serwisu
2) Metoda w serwisie ma adnotację @ Async, wykonuje się to w osobnym wątku
3) W środku metody serwisu tworzę n obiektów CompletableFuture poprzez CompletableFuture.allOf() i wewnątrz nich wykonuję obilczenia
4) Z List robię CompletableFuture w ten sposób https://stackoverflow.com/a/30026710
5) Serwis zwraca tego futura do kontrolera
6) Metoda w Controllerze zwraca Callable z wynikiem tego, co zwróci serwis (wtedy Spring niby wie, że tam są jakieś rzeczy wykonywane ciężkie)

Powyższe działa i się sprawuje nawet dobrze, ale nie wiem czy nie robię czegoś nadmiarowo / nieefektywnie i nie mam pewności czy to nie jebnie w którymś momencie ( ͡° ͜ʖ ͡°)

Jakieś pomysły, opinie?
  • 1
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach