Architektura aplikacji Spring

0

Cześć.

W ostatnich miesiącach urodził mi się w głowie pomysł na swoją pierwszą aplikację w Spring Boot, coś tam napisałem, coś udało się stworzyć, jednak im czym głębiej tym więcej wątpliwości.Nie chcąc tracić więcej czasu, na moje przemyślenia,więc mam kilka pytań.

Aplikacja miałaby korzystać z zewnętrznego API które znalazłem w internecie, dokładnie chodzi o aktualne wyniki meczów piłkarskich. Swój projekt jednak chciałbym oprzeć na własnej bazie danych która będzie zawierała, tylko kluczowe dla mnie informację z API. Pytanie czy jest to dobra praktyka, żeby pobierać dane z API, następnie zapisywać potrzebne mi informację do swojej bazy ?

Api jest aktualizowane w czasie rzeczywistym, chciałbym, żeby moja baza również była aktualizowana, powiedzmy co 30 minut (chodzi o wyniki meczów), jakie by było dobre rozwiązanie na to ?
Postawić oddzielną aplikację tylko, żeby uruchamiała jakieś zadanie co 30 minut ? Wydaję mi się, że są na to lepsze sposoby, poza tym, tworzenie dwóch aplikacji korzystających z jednej bazy wymaga podwójnej konfiguracji. Wydaję mi się, że najlepiej by było stworzyć jakiś serwis, który będzie uruchamiał się automatycznie co 30minut, podczas działania aplikacji.

W związku, że jestem początkującym samoukiem, prośba o nakierowanie co najlepiej byłoby zrobić w takiej sytuacji, jaki temat zgłębić ?

0

Na tym forum większość mają zwolennicy Springa, ale ma on również opozycję :)

Możesz się zainteresować zrobieniem tego projektu na czystym Java EE (wersja 7 albo 8 - nawet nie myśl o J2EE - to nie ma już niemal nic wspólnego).

Inaczej mówiąć pod sztandarami "single dependency java-ee"

Czołowym apostołem tego kierunku jest Adam Bien, dodatkowo Antonio Concalves. Adam Bien na prezentacjach bardzo podobne projekty robi.

1

Jak najbardziej spring boot będzie do tego odpowiedni.
A zapisywanie informacji z api w bazie ma taki sens, że dane masz zawsze dostępne - api może czasem nie działać, może się zmieniać, więc dochodzi czas na dostosowanie się do nowej wersji z czasem może też przestać zwracać historyczne dane itp. itd.

Co do okresowego pobierania danych to spring ma do tego odpowiedni mechanizm wystarczy adnotacja @EnableScheduling
i dorobienie odpowiedniej metody, która będzie realizowała nasze zadanie (do prostej aplikacji wystarczy)

@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
    // tutaj kod
}
0

No to jeszcze kolejne pytanie co z warstwą widoku, do tej pory miałem zamiar zrobić JSP z wykorzystaniem JSTL. Z tego co czytałem i widzę po ogłoszeniach, obecnie, raczej tworzymy tylko REST klienta a potem obrabiamy widok w Angularze. Czy jest sens brnąć w JSTL, czy raczej poświecić ten czas na nauke Angulara?

2

Zapomnij o JSTL i JSP. Angular. Użyj angular-cli dla ułatwienia. Będzie prościej.

Co do orygynalnego pytania - jak nie masz potrzeby jakoś tego historycznie przechowywać to olałbym tą baze i składowanie - to bardzo upraszcza. Ja tam trzymam wszystko w RAM (w hashmapie np.) i jestem zadowolony. Robi się tak i na produkcji. Każda baza to kolejna baza do utrzymania i kolejny punkt gdzie dane robią się niespójne z resztą - po co to komu.

0

Normalnego timera zrób, jak to w javie. A jak wolisz to skorzystaj z tego typu mechanizmów swojego środowiska: spring, ee. Szukasz po scheduler, timer. No i wrzucasz do bazy, tak. Dla początkującego najlepsze udeptane i popularne ścieżki. Nie ma potrzeby rozbijać małej aplikacji na mikroserwisy, chyba że jako ćwiczenie.

Mikroserwis miałby sens, gdybyś część aplikacji chciał trzymać gdzie indziej. Na przykład front robi swoje, a aktualizator bazy chodzi sobie gdzieś w chmurze. Albo front siedzi na innej technologii, a do aktualizatora bardziej pasuje inna, np. javascript. Z tego co wiem, to webscraping lepiej się robi w javascripcie (Phantom, Node.js) niż w Javie.

0

W związku, że moja przygoda z angularem dopiero się rozpoczyna, a część aplikacji która napisałem była zrobiona z pomocą JSTL, mam kolejne pytanie.

Czy dobrze myślę:
Z controllera powinienem przekazywać JSON'a do Angulara, a następnie na podstawie tego JSONa w Angularze tworzyć obiekty, a potem wyświetlać interesujące mnie wartości obiektu?
Czy mogę z Javy przekazać całą liste obiektów ?

Wydaję mi się, że pierwsze podejście jest jedynie możliwe, ale wolę się upewnić.

0

Tak i tak.

0

To pytanie które podejście jest lepsze, wydajniejsze ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1