#programowanie #java #spring #springboot #maven
Jeśli robicie małą aplikację w Spring Boocie to po prostu uruchamiacie ją jako JAR.
Ale co jak do tej aplikacji ma dojść jakiś mały frontend (np. formularz, który będzie strzelał do tego backendu i jakaś pobierana lista)?
Kiedyś robiło się tak:
- MVC i front w JSP - już tak się nie robi,
- MVC i front w Thymeleaf - też już stare i chcę mieć one page app,
- Front w HTML i JS, do tego jQuery albo inny framework pobierany jako JS w index.html, wszystko wrzucone do resource apki backendowej.
Teraz front robi się w Angular/React (budowane przez Webpack i npm, a nie zwykły plik index.html) i stawia jako oddzielną aplikację.
Ale ja nie potrzebuję oddzielnej aplikacji (dodatkowo problem dla adminów, bo się komplikują wdrożenia), chcę mieć to w jednym jarze.
Jak do tego podchodzicie?
Pakujecie Mavenem (który plugin?) czy jak inaczej?
Jeśli robicie małą aplikację w Spring Boocie to po prostu uruchamiacie ją jako JAR.
Ale co jak do tej aplikacji ma dojść jakiś mały frontend (np. formularz, który będzie strzelał do tego backendu i jakaś pobierana lista)?
Kiedyś robiło się tak:
- MVC i front w JSP - już tak się nie robi,
- MVC i front w Thymeleaf - też już stare i chcę mieć one page app,
- Front w HTML i JS, do tego jQuery albo inny framework pobierany jako JS w index.html, wszystko wrzucone do resource apki backendowej.
Teraz front robi się w Angular/React (budowane przez Webpack i npm, a nie zwykły plik index.html) i stawia jako oddzielną aplikację.
Ale ja nie potrzebuję oddzielnej aplikacji (dodatkowo problem dla adminów, bo się komplikują wdrożenia), chcę mieć to w jednym jarze.
Jak do tego podchodzicie?
Pakujecie Mavenem (który plugin?) czy jak inaczej?
K.....l
2020-01-18 20:17:59
+6
@mk321: jak na moje to wystarczy wrzucic fronty do katalogu static w resources i beda serwowane przez serwer z jarki.
Mozesz sobie podpiac zeby podczas budowania mavenem/gradlem odpalal sie jakis webpack (czy co to sie teraz uzywa na rakowych frontach ;p) i jako target mial static
Mozesz sobie podpiac zeby podczas budowania mavenem/gradlem odpalal sie jakis webpack (czy co to sie teraz uzywa na rakowych frontach ;p) i jako target mial static
E.....r
2020-01-18 20:08:33
+3
Ale ja nie potrzebuję oddzielnej aplikacji (dodatkowo problem dla adminów, bo się komplikują wdrożenia)
@mk321: może czas zmienić adminów, jeśli ogarnięcie frontu i backendu osobno to problem?
mk321
[OP]
2020-01-18 20:34:24
+1
@PrzegrywWykopek: i komercyjnie robi to się ręcznie? Albo każdy pisze skrypty w bashu, które będą to kopiować? Nie ma jakiego ładnego rozwiązania?
Jak mam front i backend na jednym serwerze, to łatwiej o zabezpieczenia. Wszystkie CORS-y itd. mają być dostępne tylko "od siebie" i z głowy. Jak mam dwie maszyny (np. S3) to już muszę myśleć skąd można strzelić, a skąd nie (i przy zmianie maszyny backendowej zmieniać konfigurację na frontendowej).
Przy dużych aplikacjach (i dużej liczbie użytkowników) tak, przy małych niepotrzebna komplikacja.
Przy okazji, cache frontu nie będzie mi działać jak statyczne pliki będą lecieć z backendu?
Czy na AWS coś dodatkowo konfigurujesz (coś w stylu CDN-a) czy po prostu wrzucasz na S3 i tyle?
Jak mam front i backend na jednym serwerze, to łatwiej o zabezpieczenia. Wszystkie CORS-y itd. mają być dostępne tylko "od siebie" i z głowy. Jak mam dwie maszyny (np. S3) to już muszę myśleć skąd można strzelić, a skąd nie (i przy zmianie maszyny backendowej zmieniać konfigurację na frontendowej).
Przy dużych aplikacjach (i dużej liczbie użytkowników) tak, przy małych niepotrzebna komplikacja.
Przy okazji, cache frontu nie będzie mi działać jak statyczne pliki będą lecieć z backendu?
Czy na AWS coś dodatkowo konfigurujesz (coś w stylu CDN-a) czy po prostu wrzucasz na S3 i tyle?
K.....l
2020-01-18 21:30:40
+1
@mk321: "maven jest jednak nadal stabilniejszy" - po czym tak twierdzisz skoro z twoich odpowiedzi jasno wynika, ze nie miales nic wspolnego z czymkolwiek profesjonalnym? :)
K.....l
2020-01-18 21:35:20
+1
@PrzegrywWykopek: >frontend to się wrzuca na s3 i serwuje cache klientom w zależności od lokalizacji.
To akurat spora przesada :P po pytaniu OPa widac, ze to jakas mala p-------a gdzie uzycie AWS jest sporym overkillem
To akurat spora przesada :P po pytaniu OPa widac, ze to jakas mala p-------a gdzie uzycie AWS jest sporym overkillem
mk321
[OP]
2020-01-18 20:12:12
+0
@Enviador: ale po co ma być oddzielnie?
Robię bardzo małe aplikacje, których używa kilka osób. Odpalam jar-a i aplikacja stoi. Po co mam to komplikować jak nic mi to nie daje?
Robię bardzo małe aplikacje, których używa kilka osób. Odpalam jar-a i aplikacja stoi. Po co mam to komplikować jak nic mi to nie daje?
mk321
[OP]
2020-01-18 20:26:57
+0
@Kuriozal: no tak, mogę zbudować ręcznie front, wrzucić do static, zbudować backend, pilnować, żeby w folderze static git ignorował tylko te wrzucone pliki (bo przecież mogą być inne)... Tylko czy muszę robić to ręcznie?
Istnieje plugin do Mavena, który niby to robi automatycznie. Ale czy to dobre podejście? Ten plugin jest mało popularny, rozwijamy głównie przez jedną osobę, więc w każdej chwili może już nie być wspierany.
Nie wiem jak inni to robią. Jakoś mi się nie chce wierzyć, że nagle wszyscy trzymają dwie oddzielne aplikacje jak do niedawna wszyscy trzymali w jednej.
Chociażby przejście z AngularJS na Angular 2 wymagało trzymania frontu w osobnym projekcje i budowania npm-em...
Czy tylko z tego powodu musiała zmieniać się infrastruktura i środowisko produkcyjne, bo frontewdowcom zachciało się o jedną wersję podbić bibliotekę?
Istnieje plugin do Mavena, który niby to robi automatycznie. Ale czy to dobre podejście? Ten plugin jest mało popularny, rozwijamy głównie przez jedną osobę, więc w każdej chwili może już nie być wspierany.
Nie wiem jak inni to robią. Jakoś mi się nie chce wierzyć, że nagle wszyscy trzymają dwie oddzielne aplikacje jak do niedawna wszyscy trzymali w jednej.
Chociażby przejście z AngularJS na Angular 2 wymagało trzymania frontu w osobnym projekcje i budowania npm-em...
Czy tylko z tego powodu musiała zmieniać się infrastruktura i środowisko produkcyjne, bo frontewdowcom zachciało się o jedną wersję podbić bibliotekę?
P.....k
2020-01-18 20:27:26
+0
@mk321: a co to za problem wrzucić aplikację w angluarze do resourców i podpiąć npm? robi się tak komercyjnie. ale również
2020
frontend w statycznych resourscachfrontend to się wrzuca na s3 i serwuje cache klientom w zależności od lokalizacji.
P.....k
2020-01-18 20:51:54
+0
@mk321:
Gradle i taski, w tym celu został stworzony gradle. Maven to fajne narzędzie, gdy jedyne co potrzebujesz, to zaciągnąć zależności i podpiąć jakiś plugin. W przypadku takiego angularjs nie miałeś jakiś fancy procesów, co najwyżej minifikacja. W Angularze 2 jest już inaczej, bo musisz przepuścić przez translator typescript. Ale to nie są skomplikowane procesy i opierają się co najwyżej na odpowiednim wywołaniu npm, a to możesz łatwo użyć w gradle lub jakimiś pluginami w mavenie. Poza tym w pipeline w jenkinie mozesz cuda robić, to nie jest problem i nie jest z pewnością ręczny proces.
Masz na myśli podmienia frontu? Nie rozumiem, dlaczego backend ma serwować frontend i go podmieniać? Od tego są pipeline na jenkinsie
Zależy czego oczekujesz, cache na S3 wymaga odczekania jakiegoś czasu, żeby zobaczyć zmiany po wrzuceniu. Zmiany bez cache od razu zobaczysz
To pojęcie względne, ja nie widzę w tym przypadku problemów.
i komercyjnie robi to się ręcznie? Albo każdy pisze skrypty w bashu, które będą to kopiować? Nie ma jakiego ładnego rozwiązania?
Gradle i taski, w tym celu został stworzony gradle. Maven to fajne narzędzie, gdy jedyne co potrzebujesz, to zaciągnąć zależności i podpiąć jakiś plugin. W przypadku takiego angularjs nie miałeś jakiś fancy procesów, co najwyżej minifikacja. W Angularze 2 jest już inaczej, bo musisz przepuścić przez translator typescript. Ale to nie są skomplikowane procesy i opierają się co najwyżej na odpowiednim wywołaniu npm, a to możesz łatwo użyć w gradle lub jakimiś pluginami w mavenie. Poza tym w pipeline w jenkinie mozesz cuda robić, to nie jest problem i nie jest z pewnością ręczny proces.
Przy okazji, cache frontu nie będzie mi działać jak statyczne pliki będą lecieć z backendu?
Masz na myśli podmienia frontu? Nie rozumiem, dlaczego backend ma serwować frontend i go podmieniać? Od tego są pipeline na jenkinsie
Czy na AWS coś dodatkowo konfigurujesz (coś w stylu CDN-a) czy po prostu wrzucasz na S3 i tyle?
Zależy czego oczekujesz, cache na S3 wymaga odczekania jakiegoś czasu, żeby zobaczyć zmiany po wrzuceniu. Zmiany bez cache od razu zobaczysz
Jak mam front i backend na jednym serwerze, to łatwiej o zabezpieczenia.
To pojęcie względne, ja nie widzę w tym przypadku problemów.
mk321
[OP]
2020-01-18 21:03:54
+0
@PrzegrywWykopek: nie używam Gradle tylko Maven. Może czas wreszcie się przerzucić. Ale myślałem że na jedno wychodzi (też tylko do pobierania zależności i odpalania pluginów). Tylko Gradle niby szybszy, bo robi równolegle (ale też słyszałem o problemach z szybkością budowania względem Mavena). Były też problemy z Gradle i Javą 11 w Springu. Wychodzi, że Maven jednak nadal stabilniejszy.
Miałem na myśli, że jak mam front i backend w jednym jar, to żeby dostać front to użytkownik nadal strzela do backendu (tylko że do embedded Tomcat/Jetty). I że może przez to nie działa cache (bo wspomniałeś o cache). No ale przecież co za różnica... Backendowe GET-y też mogą być cachowane...
Czyli na S3 cache jest włączony z automatu i nie trzeba nic konfigurować?
Jak wrzucam coś nowego, to chyba jakoś da się wyczyścić cache?
Miałem na myśli, że jak mam front i backend w jednym jar, to żeby dostać front to użytkownik nadal strzela do backendu (tylko że do embedded Tomcat/Jetty). I że może przez to nie działa cache (bo wspomniałeś o cache). No ale przecież co za różnica... Backendowe GET-y też mogą być cachowane...
Czyli na S3 cache jest włączony z automatu i nie trzeba nic konfigurować?
Jak wrzucam coś nowego, to chyba jakoś da się wyczyścić cache?
P.....k
2020-01-18 21:24:59
+0
nie używam Gradle tylko Maven. Może czas wreszcie się przerzucić. Ale myślałem że na jedno wychodzi (też tylko do pobierania zależności i odpalania pluginów). Tylko Gradle niby szybszy, bo robi równolegle (ale też słyszałem o problemach z szybkością budowania względem Mavena). Były też problemy z Gradle i Javą 11 w Springu. Wychodzi, że Maven jednak nadal stabilniejszy.
@mk321: tutaj chodzi o taski gradle i to co umożliwiają. W skrócie możesz rozszerzyć łatwo builda dodając do tego odpalenie npm i wrzucenie w odpowiedni folder. Co do stabilności to się nie wypowiem, powiem ci tylko, że pracuje aktualnie nad bardzo dużym projektem składającym się z dziesiątek podprojektów i używamy gradle, ale używamy javy 8.
Miałem na myśli, że jak mam front i backend w jednym jar, to żeby dostać front to użytkownik nadal strzela do backendu (tylko że do embedded Tomcat/Jetty). I że może przez to nie działa cache (bo wspomniałeś o cache). No ale przecież co za różnica... Backendowe GET-y też mogą być cachowane...
To nie tak, cache ustawiasz na tomcatcie, czy tam jetty, ja miałem na myśli cloud front.
Czyli na S3 cache jest włączony z automatu i nie trzeba nic konfigurować?
Cache control, ale nie pamiętam czy z automatu ustawiają.
Jak wrzucam coś nowego, to chyba jakoś da się wyczyścić cache?
Tak, ale cały czas miałem na myśli cloud front, który tak naprawdę robi ci cache i co najważniejsze serwuje z różnych miejsc na wiecie
globalbus
2020-01-18 21:33:34
+0
@mk321: gradle to zupełnie inna filozofia budowania projektów. Nie ma stałego lifecycle. Aby dorobić logikę, nie trzeba rzeźbić pluginów (ale można). Napisanie taska, który wywoła npm i skopiuje wynik do resourceów to ledwie kilka linijek kodu.
htfhere
2020-01-18 22:17:59
+0
@mk321:
Lap to:
https://blogg.kantega.no/webapp-with-create-react-app-and-spring-boot/
I p-----l tych co mowia o 2 apkach na osobnych portach xd
Lap to:
https://blogg.kantega.no/webapp-with-create-react-app-and-spring-boot/
I p-----l tych co mowia o 2 apkach na osobnych portach xd
LazyInitializationException
2020-01-18 22:20:35
+0
[komentarz usunięty]
mk321
[OP]
2020-01-18 22:20:43
+0
cały czas miałem na myśli cloud front
@PrzegrywWykopek: a czyli oddzielna "usługa" AWS, tak jak pisałem, ze takie CDN (nawet sami tak to opisują na stronie: https://aws.amazon.com/cloudfront/ ).
cache ustawiasz na tomcatcie, czy tam jetty
@PrzegrywWykopek: jak mam Spring Boota to na Tomcat/Jett embedded raczej dużo nie ustawiam. A ten cache w Springu to chyba całkiem co innego niż cache na poziomie sieci.
po czym tak twierdzisz
@Kuriozal: po tym co pisałem dwie linijki wyżej. Jeśli Spring (Pivotal) nie radził sobie z Javą 11 w Gradle, to znaczy, że jest coś nie tak (jak widać z Mavenem sobie poradził od razu). Pewnie sytuacja się nie powtórzy, ale wolałbym nie czekać tygodniami na fixa... Czy problem z Gradle był ze względu na większe skomplikowanie czy na niższy priorytet, to dla mnie nieistotne. Dodatkowo problem z wydajnością, o którym pisałem - sam go nie doświadczyłem, ale czytałem. Po tym tak twierdzę, o czym napisałem. Nie powiedziałem też, że Gradle jest w ogóle niestabilny. Wyrwałeś zdanie z kontekstu.
możesz rozszerzyć łatwo builda dodając do tego odpalenie npm i wrzucenie w odpowiedni folder
Napisanie taska, który wywoła npm i skopiuje wynik do resourceów to ledwie kilka linijek kodu
@globalbus: @PrzegrywWykopek: plugin Mavenowy o którym wspomniałem instaluje node/npm w lokalnym folderze, a nie tylko odpala ten z systemu. Dzięki temu np. Jenkins czy ktoś kto tylko chce zbudować sobie aplikację nie musi instalować sobie node'a. Wadą jest to, że musi się to ściągnąć do folderu przed zbudowaniem.
Ale może stąd wynika mniejsza niż zakładałem popularność tego pluginu.
- Ci co robią duże aplikacje dzielą na dwie aplikacje.
- Ci co robią małe i mają w jednej i używają Gradle, to nie muszą używać pluginu.
- Zostają tylko ci co robią małe, maja w jednej i używają Mavena. Ale nadal wydaje mi się to za mało i mam podejrzenie, że ludzie robią to jeszcze inaczej.
to jakas mala p-------a gdzie uzycie AWS jest sporym overkillem
@Kuriozal: dokładnie, robię małe pierdółki/toole dla kilkunastu/kilkudziesięciu osób (które kiedyś mogą się rozrosnąć). AWS rozważam jedynie jako zwykły serwer: wrzucić JAR-a i uruchomić. Nie używać żadnych usług AWS-owych.
mk321
[OP]
2020-01-18 22:22:38
+0
@htfhere: @LazyInitializationException: dzięki.
Właśnie o ten plugin mi chodziło:
(nie chciałem sam podawać, żeby nie sugerować odpowiedzi)
Czyli jednak po prostu się go używa.
Właśnie o ten plugin mi chodziło:
com.github.eirslett:frontend-maven-plugin
(nie chciałem sam podawać, żeby nie sugerować odpowiedzi)
Czyli jednak po prostu się go używa.
tempname0626
2020-01-19 18:24:11
+0
@Kuriozal: @PrzegrywWykopek: a i to jeśli nie potrzebujesz np. SEO