Cześć wszystkim.
Poniższy wątek jest luźno związany z moim poprzednim wątkiem więc jakby kogoś interesował kontekst to zapraszam tutaj: Wydajne wyciąganie danych z bazy w Javie
Przechodząc do rzeczy:
Mam za zadanie zaimplementować mechanizm generowania zestawień w aplikacji. Zestawienia mają się generować codziennie w godzinach nocnych. Do tego momentu wszystko jest dla mnie zrozumiałe ale okazało się że aplikacja działa w klastrze, tzn. wychodząc na produkcję jest uruchamiana w kilku instancjach które współdzielą bazę, nie wiem czy to docker czy coś innego. Wiedza ta jest po stronie zespołu wdrożeniowego. Powyższa sytuacja ma następujące konsekwencje:
- Jeżeli istnieje np. 5 instancji aplikacji i wszystkie o godzinie 23:00 zaczną generować raport/chcieć się dobrać do tych samych danych (baza współdzielone między instancjami) to istnieje czy istnieje możliwość jakiegoś locka na bazie danych (jeżeli źle to nazywam to niech ktoś mnie poprawi ) ? Wydaje mi się że tak skoro wszystkie instancje używają tych samych danych do logowania/użytkownika do bazy. Baza to OracleDB dla rozjaśnienia.
- Aplikacja jest napisana w Springu i znalazłem coś takiego celem zabezpieczenia się przed owymi lockami na bazie: https://www.baeldung.com/shedlock-spring, i moje pytanie brzmi: ktoś z Was drodzy forumowicze używał Shedlocka ze Springiem w środowisku produkcyjnym? Jakie inne rozwiązania istnieją do rozwiązania tego problemu? Znalazłem jeszcze Quartza ale wydał mi się on strasznie niedostępny w przypadku gdy chciałem do klas implementujących interfejs
Job
wstrzykiwać zależności przez konstruktor z @Autowired a znalezione tutoriale ze spinaniem Quartza ze Springiem wydały mi się zagmatwane. Jak radzicie sobie z problemem dostępu do danych przy aplikacji w wielu instancjach/jakich technologii używacie? - Później zaczęła frapować mnie inna kwestia, mianowicie: jeżeli 5 instancji aplikacji będzie generować zestawienie bazując na tych samych danych to w rezultacie dostanę 5 xlsów z raportem o tej samej treści co wydaje mi się bez sensu. Zastanawia mnie kwestia czy wywołanie tego generowania raportu nie powinno być wyciągnięte poza aplikację, w sensie: zewnętrzny klient woła aplikację SOAPem/RESTem na metodę np.
generujZestawienie
a to żądanie dopiero trafia do jakiejś tam konkretnej instancji za pośrednictwem gatewaya. Które z tych podejść ma sens? Dodam że wygenerowany zestawienie ma być zapisywane na FTPie więc metodagenerujZestawienie
jest czystym voidem.