Jeśli podobają Ci się moje filmy, to zostaw łapkę w górę i za subskrybuj mój kanał. Zapraszam Cię także do zapoznania się z moimi kursami i warsztatami: 🟢 Kurs Hibernate i JPA - kursy.nullpointerexception.pl/hibernate/ 🟠 Warsztat Architektura Heksagonalna - kursy.nullpointerexception.pl/product/warsztat-architektura-heksagonalna/ 🟢 Kurs Testy Jednostkowe - kursy.nullpointerexception.pl/testy-jednostkowe/ 🟠 Warsztat Architektura Warstwowa - kursy.nullpointerexception.pl/product/warsztat-architektura-warstwowa/
Męczyłem się sporo czasu ze Swaggerem, tak jak poprzednicy, aż w końcu wyczytałem, że lepiej użyć starszej wersji springa (2.7.16), ja używałem 3.1.4. W zasadzie opcjonalnym rozwiązaniem dla Swaggera będzie użycie Postmana - minus taki, że nie będzie to tak wszystko ładnie wyglądać jak przy UI. Odcinek dużo wniósł do mojej wiedzy, pozdrawiam ;)
Baaardzo dobry materiał. Niby 30min ale przekazałeś dużo wiedzy. Chętne obejrzałbym odcinek również z REST API ale takie bardziej rozbudowane, np kiedy używać Optional, ResponseEntiy ze zwracanymi kodami odpowiedzi HTTP (jakie kody zwracać w danej sytuacji). Czekam na kolejny odcinek.
Dzięki za kurs. Jak ktoś ogarnia podstawy, to fajnie, szybko przelatujesz przez wszystkie istotne zagadnienia dopowiadając pewne rzeczy, które mogły umknąć w trakcie nauki.
Nie jestem zwolennikiem certyfikatów. Wolę uczyć innych tego co im się przyda na co dzień w pracy, w życiu itd. Dlatego się staram tworzyć bardzo praktyczne kursy. Zwłaszcza że teraz certyfikaty nie są aż tak popularne jak kiedyś 😉
Bardzo przyjemny kursik :D Pytanko: jeżeli w swaggerze chce wykonać metodę getPost() i w błedzie 500 nie otrzymam wiadomości która ty zaimplementowałeś wyjątku czyli "Not implemented yet!", jest to błąd implementacji wyjątku w kontrolerze? Konkretnie chodzi mi to co znajduje się w Response Body { "message": "Not implemented yet!" }
To tak jakby bardziej tematyka Hibernate'a i nie do końca pasuje mi do kursu Spring Boota. Zobaczymy, jak skończę ten kurs, to może coś pomyślę nad Hibernatem
Hej, 3.0.0 działa trochę inaczej tutaj znalazłem rozwiązanie stackoverflow.com/a/66260503/9304291 1. Zamień tamte dwa dependency z tym ->implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0' 2. usuń adnotację @EnableSwagger2 z klasy config 3. otwórz przeglądarkę pod adresem localhost:8080/swagger-ui/index.html
Dodatkowo gdyby ktoś chciał zrobić uploadFiles(@RequestPart("uploadfiles") MultipartFile[] uploadfiles) to w wersji 2.9.2 jest to niemożliwe, natomiast w 3.0.0. działa świetnie.
mi po usunięciu adnotacji EnableSwagger zaczeło działać, ale znowu nie wejde w przeglądarce do tego bo swagger nie istnieje. Wyskakuje błąd po załączeniu Swaggera, create breakpoint
Fajny kurs :) Mam pytanie, używasz gradle i generujesz dane w build.gradle. Jeśli użyję mavena to gdzie umieszczam metodę do tworzenia tych danych jeśli nie mam "build.gradle"?
To jest akurat zaletą Gradle, że możesz dopisać kawałek skryptu w groovym ;) W Mavenie, bezpośrednio nie masz takiej opcji. Może istnieją jakieś pluginy, ale nie znam żadnego ;)
Co zrobić gdy h2 nie chce załadować danych z data.sql? DDL się generuje poprawnie, ręczne inserty z konsoli h2 też działają. W logach jest tylko jeden warning związany z spring.jpa.open-in-view, zmienianie tego nic nie zmieniło. Spring.datasource.initialization-mode=always nie pomogło. Proszę o pomoc
Hm, ciężko coś powiedzieć, generalnie to dosyć prosty mechanizm, więc jeśli zrobiłeś wszystko dobrze, to powinno działać. Spróbuj może przebudować projekt, może coś pomoże.
Miałem taki przypadek, że ładowało się wszystko poza postami. Okazało się, po włączeniu debugowania Hibernate, że przy tworzeniu repozytorium dla postów tabela z postami była usuwana i tworzona na nowo - pusta. Zapomniałem dodać spring.jpa.hibernate.ddl-auto=none w application.properties. Po dodaniu wszystko działa jak trzeba.
Hej! Super materiał, bardzo konkretnie, bez rozdrabniania się nad zbędnymi rzeczami. Mam jedno pytanie. Czy jest jakiś konkretny powód, dla którego tworzysz schemat bazy w SQL i dodajesz dane insertami? Pzyzwyczajony jestem do sposoby ze stworzeniem klas odwzorowujących tabele, dodaniu do nich adnotacji i w application.properties linii "spring.jpa.hibernate.ddl-auto=create". Twoja metoda ma jakieś konkretne zalety, czy jest to po prostu kwestia "gustu" w większości przypadków?
Tak, robię to z konkretnego powodu. Takie podejście daje mi większą kontrolę nad tym, jak wygląda schemat bazy danych (dokładnie 100% kontroli). Jak pozwalasz Hibernate'owi tworzyć tabele, kolumny, indeksy, klucze obce, to robi on to "po swojemu". Jeśli źle skonfigurujesz relacje pomiędzy encjami, to Hibernate odwzoruje twoje błędy w tabelach (i w sumie bardzo często się tak dzieje). Dlatego najpierw tworzę prawidłowy model bazy danych. Wiem, jak powinien wyglądać, więc tworzę go w odpowiedni sposób. Do tego dostosowuję mapowanie encji. Jeśli moje mapowanie encji nie chce współpracować z tabelami, to od razu widzę, że mam złe mapowanie, bo wywalają się błędy. W odwrotnej sytuacji nie ma żadnego ostrzeżenia, bo przecież Hibernate nie wie, co chciałeś z mapować i dla niego każde twoje mapowanie jest ok. Złe mapowanie, może być przyczyną problemów wydajnościowych nawet w małej aplikacji. Poza tym jest jeszcze kilka drobniejszych powodów, dlaczego tak robię, ale wyszedłby z tego całkiem spory artykuł i może opisze to w najbliższym czasie na blogu. Zapraszam do napisania się na newsletter nullpointerexception.pl/newsletter/
@@matdabski wow, dzięki za szybką i przede wszystkim szczegółową odpowiedź. Chyba skorzystam, bo naprawdę emanujesz konkretną wiedzą, a że sam jestem dopiero na początku kariery to trzeba czerpać od najlepszych ;) pozdrawiam
Witam, mam pewne pytanie co do skrótów klawiszowych. Jaki skrót należałoby zastosować jeśli mamy np. pare linijek w prawo, a chciałbym je wyrównać do lewej strony? W prawą strone przesuwamy za pomocą zaznaczenia wszystkeigo i taba, a lewo? Pozdrawiam.
Shift + TAB, poza tym w Intellij jest skrót do formatowania składni CTRL + ALT + L. Polecam jeszcze obejrzeć mój film o pracy w Intellij ua-cam.com/video/Rply-mi_J7o/v-deo.html
Hej, super kurs :). Czy może podpowiedzieć dlaczego w pliku data. sql nie zapisują się inserty post do bazy, a zapisują się inserty comment. Jak wchodzę do bazy H2 i wpiszę manualnie to bez problemu rekordy się pojawiają w tabeli post. Z góry dzięki za podpowiedź i pozdrawiam.
@@matdabski zrobiłem create-drop i nie było "postów" w H2. Zmieniłem na none i zapisuje. Dzięki serdeczne za pomoc :). Mam jeszcze pytanie co może być przyczyną jak metoda getPosts przy użyciu swaggera, czy postmana zwraca pustego JSONA tzn. code 200 a response body w formie [{},{},{}]
@@matdabski Miałem, ale zauważyłem, że kompilator krzyczy, że nie używam pól w klasie Post. Okazało się, że Lombok mi nie działa w STS. Chciałbym mieć Inteligij, ale życzą sobie za dużo kasy i programuje w STS. Dzięki jeszcze raz za pomoc i jadę dalej :).
@@przemysawmaecki9958 IntelliJ IDEA Community Edition jest zupełnie darmowe i wystarczające. Ja z niego korzystam w tym filmie. Nikt nie korzysta z STS, serio!
hejo, trzy pytanka 1. update przy uzyciu jpa repository, to branie po idku i zmiana setterami pol, ale trzeba wszedzie sprawdzac czy request nie ma nuli? 2. jakbys ugryzl encje z obrazkiem? array byte czy multipart w controllerze a pozniej na array of bytes? 3. nad @Entity @Table nie powinno byc equals i hashcode?
1. Tak, jeśli przeszkadzają Ci nulle to sprawdzasz. 2. Zwykle nie zapisuje obrazków w bazie tylko na dysku, a w bazie trzymam tylko nazwę i ewentualnie ścieżkę. Są plusy i minusy trzymania obrazków w bazie. Ale jak chcesz trzymać w bazie to chyba tablica bytów i wrzucasz do bloba (nie pamiętma dokładnie) 3. Jak trzymasz encje powiązane relacją w setach, to tak. Ale generowanie tych metod za pomocą adnotacji Lombok, nie jest dobrą praktyką, lepiej zaimplementować je odpowiednio. Jest na to kilka opcji.
@@matdabski dzięki za odpowiedz, a te nulle to sprawdzasz na poziomie service/repo/controller czy adnotacje masz jakieś? Czyli jak na przykład bawie się amazonem to takie obrazki trzymać w na przykład s3? :-) miłego dnia
@@zoltobialozielony tak, jak najbardziej s3. Nulle można sprawdzać adnotacjami, zobacz sobie najnowszy materiał o mapowaniu. Co prawda tam nie ma nic o nullach, ale jest trochę o adnotacjach walidujących. A do nulli masz @Notnull. ua-cam.com/video/yyZtxniWWGM/v-deo.html
@@matdabski na pewno obejrze, akurat skonczylem 04, a po pracy sobie jeszcze klepie swoj projekt, natomiast w zwiazku z tym, ze w robocie robimy 99% w apachu camelu, to taki kurs mi duzo pomaga! Dzieki bardzo!
Nie są wymagane, jak masz jedną operację na bazie danych np. jeden select to nie musisz dawać @Transactional, z tego co pamiętam w spring boot jest włączony auto commit, więc każda operacja działa w osobnej transakcji. Jak masz tylko jedną operację w metodzie, to w tym wypadku dodanie @Transactional nic nie wnosi. Chyba w 6 części robię metody z @Transactional.
cześć, pytanko. Odnośnie generowania danych testowych. Postanowiłem napisać skrypt, ale poprzez normalną metodę w javie. Problem w tym, że przy uruchomieniu programu dane sql są pobierane z poprzedniego uruchomienia programu. Instancja klasy w bloku main oraz wywołanie metody generowania danych jest wywołana przed linijką uruchamiania aplikacji springa. Jakie mogę zastosować rozwiązanie? Pozdrawiam :)
Wystarczy, że tylko raz wygenerujesz dane. Ja task w gradlu odpalam tylko raz, generuję dane, dane zapisują się do pliku i tyle. Nic więcej z tym nie robię. To taka dodatkowa funkcjonalność, dzięki której po prostu ułatwiam sobie życie. Możesz wygenerować te dane, tak jak to robisz. Zapisać bezpośrednio do pliku, lub nawet skopiować z konsoli i zapisać ręcznie do pliku i po prostu z nich korzystać przy każdym uruchomieniu aplikacji.
Witam, po 2h walki poddaję się. Wyskakuje mi błąd podczas uruchamiania spring boota: Unsatisfied dependency expressed through constructor parameter 0; Szukałem na StackOverflow i w netach i nic. Może coś podpowiesz. Kod sprawdzałem 10 razy... Dodam, że aplikacja nie włącza się prawidłowo zaraz po dodaniu interfejsu PostRepository
"parametr 0" to pierwszy parametr konstruktora. W błędzie powinieneś mieć klasę i linijkę, w które występuje ten błąd. Może to wynikać z tego, że np. w serwisie nie dodałeś adnotacji @Service, albo nie dodałeś extends w repozytorium (trochę tutaj zgaduję). Generalnie Spring nie utworzył beana dla klasy, którą chcesz wstrzyknąć i teraz zwraca Ci błąd, że nie ma co wstrzyknąć.
Korzystam z mavena, utworzyłem więc klasę która zapisuje mi rekordy do pliku data.sql, jednak rekordy te nie wyglądają tak jak u Ciebie, wygląda to w en sposób iż wartość 'i' nie jest inkrementowana, mógłbyś nakierować w jaki sposób w kodzie javy po zapisie do pliku data.sql uzyskać taką formę jak u Ciebie? Rekordy w moim pliku wyglądają w ten sposób: insert into POST(id, title, content, created) values (${i}, 'Test post ${i}', 'Content ${i}', '2020-07-11T14:26:43.612121200'); Pętla do zapisu rekordów do pliku: for (int i = 1; i
W ten sposób nie zrobisz tego w Javie. Powinieneś zrobić tak: "values ("+i+"'Test post "+i+"','Content... Ewentualnie możesz pobawić się formaterami dostępnymi w Javie: String.format("tutaj string %d", i); lub Message.format("tutaj string {0}", i);
Mateusz mam pytanie. Jak wyświetlić np wszystkie komentarze z postami. Na tym przykładzie trochę dziwnie. Ale w skrócie, mam api, pobieram listę krajów, mam joina i zwraca mi wszystkie Kraje a w response z modelu mam informacje o miastach dla danego kraju(one to mamy). I niby powinno być prosto, ale kompletnie nie wychodzi mi pobranie wszystkich miast, z polem wskazującym do jakiego kraju należą dane miasta. Udało Mi się pobrać id klucza obcego kraju dla miast , ale ja chce mieć w stringu taka informacje. Pomożesz?
Opisałem dokładnie jak trzeba to zrobić. Robisz joina tabel państw i miast (w miastach powinieneś mieć klucz obcy id_państwa lub coś podobnego). I to tyle. Może robisz coś źle, gdzieś popełniasz błąd i dlatego to nie działa, nie wiem.
Podstawy, czyli składnia, tablice kolekcje. No i oczywiście musisz umieć coś napisać w Javie. Tak naprawdę im więcej umiesz, tym łatwiej będziesz sobie radził ze Springiem
Rozumieć czym jest Java Reflection API, jak działa IoC Container i adnotacje. Najbardziej ludzi gubią adnotacje bo przejście z myślenia typowo OOP na AOP jest czasami ciężkie. Dodatkowo zrozumienie czym jest Dependency Injection i Kontekst Aplikacji. To są takie fundamenty na których opiera się spring, oczywiście da się Springa ogarnąć bez tego wszystkiego, ale może to być droga przez mękę, albo bezmyślne kopiuj-wklej z tutoriali na yt/stack overflow. Polecam też ogarnąć Java Persistance Api (ponieważ spring data z tego korzysta, ale to nie znaczy, że JPA jest częścią springa, bo to często też się początkującym myli).
Projekt jest dostępny na githubie. Porównaj czy masz takie same zależności github.com/matdabrowski/SpringBootTutorialUA-cam/blob/master/build.gradle Jeśli masz tak samo i nadal nie działa, możesz jeszcze spróbować zaimportować projekt jeszcze raz (w Intellij jest zakładka Gradle stamtąd możesz zrobić reimport)
Doszedłem do momentu gdzie wpisuje "private final PostRepository postRepository;" (zaraz po stworzeniu repozytorium)dodaje " @RequiredArgsConstructor" i dalej kompilator pokazuje że coś jest nie tak. Z podpowiedzi jakie dostaje na "alt +enter" "Variable 'postRepository' might not have been initialized". Mam wrażene jak by lombok mi tego nie wstrzyknoł :/
Cześć, świetny kurs, tylko napotkałem jeden problem. Otóż, przy próbie uruchomienia aplikacji wyskakuje mi komunikat: Parameter 0 of constructor in com.example.demo.service.PostService required a bean of type 'com.example.demo.repository.PostRepository' that could not be found. Mam jedną różnicę w porównaniu do przykładu z filmu. Nie używam bazy H2 a łączę się do lokalnej bazy na SQLServer. Do momentu dodania PostRepository wszystko było ok, jak dodałem to przy próbie wstrzyknięcia do PostService, błąd jak powyżej. Czym to może być spowodowane? Dodam, że interfejs PostRepository posiada adnotację @Repository, klasa PostService - @Service i @RequiredArgsConstructor, klasa PostController - @RestController i @RequiredArgsConstructor. Dodatkowo w klasie Application w adnotacji @SpringBootApplication wyłączyłem przez exclude klasę DataSourceAutoConfiguration.class bo sypało błędami: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
Z jakiegoś powodu spring nie stworzył beana postRepozitory. Powinien to być interfejs który dziedziczy po JpaRepository. W sumie trudno powiedzieć co może być przyczyną
@@matdabski Dokładnie ta jest, publiczny interfejs dziedziczący po JpaRepository z adnotacją @Repository, wstrzykiwanie do serwisu robiłem zarówno przez pole, settera jak i konstruktor napisany przeze mnie i @RequiredArgsConstructor z Lomboka, różnica była taka, że zamiast "Parameter 0 of constructor..." komunikat mówił "Field ...".
Po pobraniu projektu z repo i pousuwaniu zbędnych plików, problem jest taki sam, na początku pluł mi się o wersję JVM, więc zmieniłem w ustawieniach z 1.8 na 11, czy to może być tego wina? Tak czy siak, spróbuję utworzyć nowy projekt i przejść od początku tutorial raz jeszcze na bazie H2 zamiast SQL Server.
@@matdabski tak, mam. Wszystko działa do momentu wstrzyknięcia Repository do serwisu, wtedy komunikaty jak wyżej. Zastanawiam się czy w wersji 2.6.2 spring boota się nic nie zmieniło w stosunku do 2.2.6 przez co krzyczy.
Jakby komus przyszlo do glowy skorzystac z Swagger w wersji 3.x.y to inicjalizacja wyglada inaczej: github.com/springfox/springfox#migrating-from-earlier-snapshot
Najlepiej jak byś w takie sytuacji zaglądał do dokumentacji lub repo na githubie. Z tego co widzę w wersji 3 jest adnotacja @EnableOpenApi github.com/springfox/springfox-demos/blob/master/boot-swagger/src/main/java/springfoxdemo/boot/swagger/Application.java
Cześć, prośba o pomoc: Po dodatniu metody z id public Post getSinglePost(long id) { return postRepository.findById(id) .orElseThrow(); } Dostaje cały czas błąd: Error:(21, 17) java: method orElseThrow in class java.util.Optional cannot be applied to given types; required: java.util.function.Supplier
Ja używam Javy 11. Optional się trochę zmienił od Javy 11, doszły nowe metody. Metoda, której używam doszła w Javie 10. Po prostu nie masz tej metody w Javie 8, dlatego masz taki błąd.
Co do testów, to zapraszam Cię do mojego kursu o testach jednostkowych w Junit5. Cały kurs pomaga wystartować z tematem testów od zera. Jest w nim zawarte bardzo dużo przydatnych informacji pomagających poradzić sobie z każdą sytuacją testową. Kurs aktualizowałem na początku czerwca. Doszły dwa ciekawe przykłady, między innymi przykład jak odpalić testy integracyjne. Zapraszam. kursy.nullpointerexception.pl/mini-kurs-testy-jednostkowe-start/
Chciałbym znaleźć komentarze przyporządkowane do konkretnego posta, dla którego daję id w zapytaniu. Jak powinien wyglądać taki mapping? Spring Data chyba tak super łatwo tego nie umożliwia? Próbowałem z czymś takim, ale nie działa @Service @RequiredArgsConstructor public class CommentDao { @PersistenceContext private final EntityManager entityManager; public List findCommentsByPostId(long id) { return entityManager.createQuery("SELECT c from Comment c JOIN Post p ON p.id = c.id where p.id = :id").setParameter("id",id).getResultList(); } }
Cześć Grzegorz ;) Jak korzystasz z Spring Data, to prawie nigdy nie ma potrzeby korzystania ze Entity Managera. W 5 części, która będzie dostępna jutro o 9-tej. Dodaję do encji Comment pole postId. Bo w bazie ono istnieje od początku. I dodaję też CommentRepository, więc jak już masz repository i to pole to wystarczy w tym repository zrobić metodę np. findAllByPostId(Long postId). I to tyle ;)
Uda£o sie zaimplementować mavena pod jdk8 pod eclipse. Od razu na starcie pojawia się problem, który (chyba) omawiasz w filmie o maven czyli brak możliwości (albo mocno utrudnione) tworzenia tasków. Jak zacząłem szukać rozwiązania to stwierdziłem, że szkoda mi dnia i po prostu zrobiłem komponent do seedowania bazy. Niestety tworzy to problem bo maven najpierw sie uruchamia a dopiero potem uaktualnia data.sql i apke trzeba uruchomić dwa razy na początku. Inaczej na razie nie umiem więc zostawiam tak jak jest. Kolejny problem to swagger (2.9.2) i akurat u mnie zadziało dopisanie odpowiedniej linii w application.properties: spring.mvc.pathmatch.matching-strategy=ant_path_matcher. Nie wiem dlaczego tak działa więc się nie wypowiadam. Generalnie typowa apka ale jak zwykle rewelacyjnie dopowiadasz co sie tak naprawde dzieje w trakcie uruchamiania itd itd. Mój największy problem jak na razie to rozumienie tych wszystkich komend w application.properties. Nie wiem skąd bierzesz te informacje na ich temat. Pewnie z jakiejś opasłej dokumentacji. Wielkie dzięki za bardzo wartościowy materiał.
Swaggera można podłączyć z innej nowszej paczki w wersji springdoc-openapi v1.6.6, chociaż nie wiem jak to wszystko będzie działało z tym co tutaj jest. Co do propertiesów to jest dokumentacja do nich docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
Sciagnalem projekt z Gita i wywala mi blad, na stack over flow pisza ze moze byc bardzo duzo przyczyn, Pomocy ! :) com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
Mam tylko zainstalowanego Workbench 8.0, spróbuje zainstalowac Server :) Zainstlowalem server i jest błąd: Caused by: liquibase.exception.DatabaseException: java.sql.SQLException: Access denied for user 'youtube'@'localhost' (using password: YES) terasz musze znalezc gdzie zmienic to haslo :)
Jeśli podobają Ci się moje filmy, to zostaw łapkę w górę i za subskrybuj mój kanał. Zapraszam Cię także do zapoznania się z moimi kursami i warsztatami:
🟢 Kurs Hibernate i JPA - kursy.nullpointerexception.pl/hibernate/
🟠 Warsztat Architektura Heksagonalna - kursy.nullpointerexception.pl/product/warsztat-architektura-heksagonalna/
🟢 Kurs Testy Jednostkowe - kursy.nullpointerexception.pl/testy-jednostkowe/
🟠 Warsztat Architektura Warstwowa - kursy.nullpointerexception.pl/product/warsztat-architektura-warstwowa/
Męczyłem się sporo czasu ze Swaggerem, tak jak poprzednicy, aż w końcu wyczytałem, że lepiej użyć starszej wersji springa (2.7.16), ja używałem 3.1.4. W zasadzie opcjonalnym rozwiązaniem dla Swaggera będzie użycie Postmana - minus taki, że nie będzie to tak wszystko ładnie wyglądać jak przy UI. Odcinek dużo wniósł do mojej wiedzy, pozdrawiam ;)
Bardzo fajnie że pokazuje Pan błędy, które się pojawiają :)
Dzięki ;)
Świetny kurs, świetnie wytłumaczone! :)
Dzięki Bartek ;)
Baaardzo dobry materiał. Niby 30min ale przekazałeś dużo wiedzy.
Chętne obejrzałbym odcinek również z REST API ale takie bardziej rozbudowane, np kiedy używać Optional, ResponseEntiy ze zwracanymi kodami odpowiedzi HTTP (jakie kody zwracać w danej sytuacji).
Czekam na kolejny odcinek.
Dzięki za komentarz. Zapiszę sobie i może za jakiś czas wykombinuję taki odcinek ;)
Dzięki za kurs. Jak ktoś ogarnia podstawy, to fajnie, szybko przelatujesz przez wszystkie istotne zagadnienia dopowiadając pewne rzeczy, które mogły umknąć w trakcie nauki.
Dzięki ;)
Kanał właśnie odkryłem i mimo że te tematy już przerobiłem, to z przyjemnością obejrzałem.
Dzięki ;)
Dzięki za dużą dawkę wiedzy
Komentarz dla zasięgu.
Świetny kurs wszystko dokładnie wytłumaczone. Czekam na kolejny odcinek. Pozdrawiam.
Dzięki Piotr ;)
Dobry materiał!
Dzięki ;)
Dzięki za kurs, plusik!
Dzięki za komentarz ;)
Mateusz, bardzo podoba mi się Twój styl tłumaczenia. Jak zrobisz kursy do certyfikacji Java i Spring to pierwszy kupię :)
Nie jestem zwolennikiem certyfikatów. Wolę uczyć innych tego co im się przyda na co dzień w pracy, w życiu itd. Dlatego się staram tworzyć bardzo praktyczne kursy. Zwłaszcza że teraz certyfikaty nie są aż tak popularne jak kiedyś 😉
@@matdabski Rozumiem, anyway, bardzo dobrze się ogląda, tak trzymaj :)
@@knowa130 Dzięki 😉
super szkolenia! Czekam na więcej :)
Dzięki ;)
Super sprawa, czekam na więcej :)
Dzięki ;)
Bardzo przyjemny kursik :D
Pytanko: jeżeli w swaggerze chce wykonać metodę getPost() i w błedzie 500 nie otrzymam wiadomości która ty zaimplementowałeś wyjątku czyli "Not implemented yet!", jest to błąd implementacji wyjątku w kontrolerze?
Konkretnie chodzi mi to co znajduje się w Response Body
{
"message": "Not implemented yet!"
}
W nowszych wersjach Spring Boota, komunikaty trzeba włączyć specjalnym propertiesem:
server.error.include-message=always
@@matdabski super uratowałeś godziny szukania że źle nazwałem pole w klasie post
Super film! Czy zrobiłbyś film, w którym wytłumaczyłbyś relacje między encjami w JPA w teorii oraz na przykładach. Pozdrawiam :)) !
To tak jakby bardziej tematyka Hibernate'a i nie do końca pasuje mi do kursu Spring Boota. Zobaczymy, jak skończę ten kurs, to może coś pomyślę nad Hibernatem
Może się komuś przyda po wgraniu swaggera 3.0.0, mi akurat program nie odpalił, jednak po zmianie na wersji 2.9.2 udało się
Dzięki, przydało się
Hej, 3.0.0 działa trochę inaczej
tutaj znalazłem rozwiązanie stackoverflow.com/a/66260503/9304291
1. Zamień tamte dwa dependency z tym ->implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
2. usuń adnotację @EnableSwagger2 z klasy config
3. otwórz przeglądarkę pod adresem localhost:8080/swagger-ui/index.html
Dodatkowo gdyby ktoś chciał zrobić uploadFiles(@RequestPart("uploadfiles") MultipartFile[] uploadfiles) to w wersji 2.9.2 jest to niemożliwe, natomiast w 3.0.0. działa świetnie.
@@marekborecki1116 Dzięki za instrukcję dla swaggera 3 :) u mnie działa
mi po usunięciu adnotacji EnableSwagger zaczeło działać, ale znowu nie wejde w przeglądarce do tego bo swagger nie istnieje. Wyskakuje błąd po załączeniu Swaggera, create breakpoint
Fajny kurs :)
Mam pytanie, używasz gradle i generujesz dane w build.gradle. Jeśli użyję mavena to gdzie umieszczam metodę do tworzenia tych danych jeśli nie mam "build.gradle"?
To jest akurat zaletą Gradle, że możesz dopisać kawałek skryptu w groovym ;) W Mavenie, bezpośrednio nie masz takiej opcji. Może istnieją jakieś pluginy, ale nie znam żadnego ;)
Albo jak chcesz sobie to jakoś wygenerować, to możesz po prostu stworzyć dodatkową klasę w Javie z metodą main i tam to umieścić.
@@matdabski dzięki za szybką odpowiedź!
@@matdabski To wlasnie ChatGPT podpowiada :)
Co zrobić gdy h2 nie chce załadować danych z data.sql? DDL się generuje poprawnie, ręczne inserty z konsoli h2 też działają. W logach jest tylko jeden warning związany z spring.jpa.open-in-view, zmienianie tego nic nie zmieniło. Spring.datasource.initialization-mode=always nie pomogło. Proszę o pomoc
Hm, ciężko coś powiedzieć, generalnie to dosyć prosty mechanizm, więc jeśli zrobiłeś wszystko dobrze, to powinno działać. Spróbuj może przebudować projekt, może coś pomoże.
Miałem taki przypadek, że ładowało się wszystko poza postami. Okazało się, po włączeniu debugowania Hibernate, że przy tworzeniu repozytorium dla postów tabela z postami była usuwana i tworzona na nowo - pusta. Zapomniałem dodać spring.jpa.hibernate.ddl-auto=none w application.properties. Po dodaniu wszystko działa jak trzeba.
Hej! Super materiał, bardzo konkretnie, bez rozdrabniania się nad zbędnymi rzeczami. Mam jedno pytanie. Czy jest jakiś konkretny powód, dla którego tworzysz schemat bazy w SQL i dodajesz dane insertami? Pzyzwyczajony jestem do sposoby ze stworzeniem klas odwzorowujących tabele, dodaniu do nich adnotacji i w application.properties linii "spring.jpa.hibernate.ddl-auto=create". Twoja metoda ma jakieś konkretne zalety, czy jest to po prostu kwestia "gustu" w większości przypadków?
Tak, robię to z konkretnego powodu. Takie podejście daje mi większą kontrolę nad tym, jak wygląda schemat bazy danych (dokładnie 100% kontroli). Jak pozwalasz Hibernate'owi tworzyć tabele, kolumny, indeksy, klucze obce, to robi on to "po swojemu". Jeśli źle skonfigurujesz relacje pomiędzy encjami, to Hibernate odwzoruje twoje błędy w tabelach (i w sumie bardzo często się tak dzieje).
Dlatego najpierw tworzę prawidłowy model bazy danych. Wiem, jak powinien wyglądać, więc tworzę go w odpowiedni sposób. Do tego dostosowuję mapowanie encji. Jeśli moje mapowanie encji nie chce współpracować z tabelami, to od razu widzę, że mam złe mapowanie, bo wywalają się błędy. W odwrotnej sytuacji nie ma żadnego ostrzeżenia, bo przecież Hibernate nie wie, co chciałeś z mapować i dla niego każde twoje mapowanie jest ok.
Złe mapowanie, może być przyczyną problemów wydajnościowych nawet w małej aplikacji.
Poza tym jest jeszcze kilka drobniejszych powodów, dlaczego tak robię, ale wyszedłby z tego całkiem spory artykuł i może opisze to w najbliższym czasie na blogu.
Zapraszam do napisania się na newsletter nullpointerexception.pl/newsletter/
@@matdabski wow, dzięki za szybką i przede wszystkim szczegółową odpowiedź. Chyba skorzystam, bo naprawdę emanujesz konkretną wiedzą, a że sam jestem dopiero na początku kariery to trzeba czerpać od najlepszych ;) pozdrawiam
Dzięki ;)
Witam, mam pewne pytanie co do skrótów klawiszowych. Jaki skrót należałoby zastosować jeśli mamy np. pare linijek w prawo, a chciałbym je wyrównać do lewej strony? W prawą strone przesuwamy za pomocą zaznaczenia wszystkeigo i taba, a lewo? Pozdrawiam.
Shift + TAB, poza tym w Intellij jest skrót do formatowania składni CTRL + ALT + L. Polecam jeszcze obejrzeć mój film o pracy w Intellij ua-cam.com/video/Rply-mi_J7o/v-deo.html
@@matdabski dziękuję bardzo
Hej, super kurs :). Czy może podpowiedzieć dlaczego w pliku data. sql nie zapisują się inserty post do bazy, a zapisują się inserty comment. Jak wchodzę do bazy H2 i wpiszę manualnie to bez problemu rekordy się pojawiają w tabeli post. Z góry dzięki za podpowiedź i pozdrawiam.
Być może nie dodałeś propertisa dla Hibernate. I Hibernate usuwa i jeszcze raz tworzy tabele. I wygląda tak jakby nie dodwały się posty
@@matdabski zrobiłem create-drop i nie było "postów" w H2. Zmieniłem na none i zapisuje. Dzięki serdeczne za pomoc :). Mam jeszcze pytanie co może być przyczyną jak metoda getPosts przy użyciu swaggera, czy postmana zwraca pustego JSONA tzn. code 200 a response body w formie [{},{},{}]
@@przemysawmaecki9958 nie masz getterów w encji Post?
@@matdabski Miałem, ale zauważyłem, że kompilator krzyczy, że nie używam pól w klasie Post. Okazało się, że Lombok mi nie działa w STS. Chciałbym mieć Inteligij, ale życzą sobie za dużo kasy i programuje w STS. Dzięki jeszcze raz za pomoc i jadę dalej :).
@@przemysawmaecki9958 IntelliJ IDEA Community Edition jest zupełnie darmowe i wystarczające. Ja z niego korzystam w tym filmie. Nikt nie korzysta z STS, serio!
hejo, trzy pytanka
1. update przy uzyciu jpa repository, to branie po idku i zmiana setterami pol, ale trzeba wszedzie sprawdzac czy request nie ma nuli?
2. jakbys ugryzl encje z obrazkiem? array byte czy multipart w controllerze a pozniej na array of bytes?
3. nad @Entity @Table nie powinno byc equals i hashcode?
1. Tak, jeśli przeszkadzają Ci nulle to sprawdzasz.
2. Zwykle nie zapisuje obrazków w bazie tylko na dysku, a w bazie trzymam tylko nazwę i ewentualnie ścieżkę. Są plusy i minusy trzymania obrazków w bazie. Ale jak chcesz trzymać w bazie to chyba tablica bytów i wrzucasz do bloba (nie pamiętma dokładnie)
3. Jak trzymasz encje powiązane relacją w setach, to tak. Ale generowanie tych metod za pomocą adnotacji Lombok, nie jest dobrą praktyką, lepiej zaimplementować je odpowiednio. Jest na to kilka opcji.
@@matdabski dzięki za odpowiedz, a te nulle to sprawdzasz na poziomie service/repo/controller czy adnotacje masz jakieś? Czyli jak na przykład bawie się amazonem to takie obrazki trzymać w na przykład s3? :-) miłego dnia
@@zoltobialozielony tak, jak najbardziej s3. Nulle można sprawdzać adnotacjami, zobacz sobie najnowszy materiał o mapowaniu. Co prawda tam nie ma nic o nullach, ale jest trochę o adnotacjach walidujących. A do nulli masz @Notnull.
ua-cam.com/video/yyZtxniWWGM/v-deo.html
@@matdabski na pewno obejrze, akurat skonczylem 04, a po pracy sobie jeszcze klepie swoj projekt, natomiast w zwiazku z tym, ze w robocie robimy 99% w apachu camelu, to taki kurs mi duzo pomaga! Dzieki bardzo!
Cześć.
Gdzie się podziały adnotacje @Translactional dla metod w Serwisach? Można to jakoś ustawić za pomocą konfiguracji?
Nie są wymagane, jak masz jedną operację na bazie danych np. jeden select to nie musisz dawać @Transactional, z tego co pamiętam w spring boot jest włączony auto commit, więc każda operacja działa w osobnej transakcji. Jak masz tylko jedną operację w metodzie, to w tym wypadku dodanie @Transactional nic nie wnosi. Chyba w 6 części robię metody z @Transactional.
@@matdabski
Dzięki za odpowiedź!
cześć, pytanko. Odnośnie generowania danych testowych. Postanowiłem napisać skrypt, ale poprzez normalną metodę w javie. Problem w tym, że przy uruchomieniu programu dane sql są pobierane z poprzedniego uruchomienia programu.
Instancja klasy w bloku main oraz wywołanie metody generowania danych jest wywołana przed linijką uruchamiania aplikacji springa. Jakie mogę zastosować rozwiązanie? Pozdrawiam :)
Wystarczy, że tylko raz wygenerujesz dane. Ja task w gradlu odpalam tylko raz, generuję dane, dane zapisują się do pliku i tyle. Nic więcej z tym nie robię. To taka dodatkowa funkcjonalność, dzięki której po prostu ułatwiam sobie życie. Możesz wygenerować te dane, tak jak to robisz. Zapisać bezpośrednio do pliku, lub nawet skopiować z konsoli i zapisać ręcznie do pliku i po prostu z nich korzystać przy każdym uruchomieniu aplikacji.
@@matdabski super, dzięki za rozwianie wątpliwości :)
Witam, po 2h walki poddaję się. Wyskakuje mi błąd podczas uruchamiania spring boota: Unsatisfied dependency expressed through constructor parameter 0; Szukałem na StackOverflow i w netach i nic. Może coś podpowiesz. Kod sprawdzałem 10 razy... Dodam, że aplikacja nie włącza się prawidłowo zaraz po dodaniu interfejsu PostRepository
"parametr 0" to pierwszy parametr konstruktora. W błędzie powinieneś mieć klasę i linijkę, w które występuje ten błąd. Może to wynikać z tego, że np. w serwisie nie dodałeś adnotacji @Service, albo nie dodałeś extends w repozytorium (trochę tutaj zgaduję). Generalnie Spring nie utworzył beana dla klasy, którą chcesz wstrzyknąć i teraz zwraca Ci błąd, że nie ma co wstrzyknąć.
W jaki sposób i kiedy następuje zamiana danych z tabeli bazy danych na obiekt POST? Czy to sie nazywa serializacja?
Korzystam z mavena, utworzyłem więc klasę która zapisuje mi rekordy do pliku data.sql, jednak rekordy te nie wyglądają tak jak u Ciebie, wygląda to w en sposób iż wartość 'i' nie jest inkrementowana, mógłbyś nakierować w jaki sposób w kodzie javy po zapisie do pliku data.sql uzyskać taką formę jak u Ciebie? Rekordy w moim pliku wyglądają w ten sposób:
insert into POST(id, title, content, created) values (${i}, 'Test post ${i}', 'Content ${i}', '2020-07-11T14:26:43.612121200');
Pętla do zapisu rekordów do pliku:
for (int i = 1; i
W ten sposób nie zrobisz tego w Javie. Powinieneś zrobić tak: "values ("+i+"'Test post "+i+"','Content...
Ewentualnie możesz pobawić się formaterami dostępnymi w Javie:
String.format("tutaj string %d", i);
lub
Message.format("tutaj string {0}", i);
W którym miejscu utworzyłeś tą klasę, w której zapisujesz inserty do pliku?
Mateusz mam pytanie. Jak wyświetlić np wszystkie komentarze z postami. Na tym przykładzie trochę dziwnie. Ale w skrócie, mam api, pobieram listę krajów, mam joina i zwraca mi wszystkie Kraje a w response z modelu mam informacje o miastach dla danego kraju(one to mamy). I niby powinno być prosto, ale kompletnie nie wychodzi mi pobranie wszystkich miast, z polem wskazującym do jakiego kraju należą dane miasta. Udało Mi się pobrać id klucza obcego kraju dla miast , ale ja chce mieć w stringu taka informacje. Pomożesz?
Opisałem dokładnie jak trzeba to zrobić. Robisz joina tabel państw i miast (w miastach powinieneś mieć klucz obcy id_państwa lub coś podobnego). I to tyle. Może robisz coś źle, gdzieś popełniasz błąd i dlatego to nie działa, nie wiem.
Co powinienem umieć, znać jeśli chodzi o znajomość Javy, żeby móc płynnie przejść do frameworku Spring?
Podstawy, czyli składnia, tablice kolekcje. No i oczywiście musisz umieć coś napisać w Javie. Tak naprawdę im więcej umiesz, tym łatwiej będziesz sobie radził ze Springiem
Rozumieć czym jest Java Reflection API, jak działa IoC Container i adnotacje.
Najbardziej ludzi gubią adnotacje bo przejście z myślenia typowo OOP na AOP jest czasami ciężkie.
Dodatkowo zrozumienie czym jest Dependency Injection i Kontekst Aplikacji.
To są takie fundamenty na których opiera się spring, oczywiście da się Springa ogarnąć bez tego wszystkiego, ale może to być droga przez mękę, albo bezmyślne kopiuj-wklej z tutoriali na yt/stack overflow.
Polecam też ogarnąć Java Persistance Api (ponieważ spring data z tego korzysta, ale to nie znaczy, że JPA jest częścią springa, bo to często też się początkującym myli).
Nie mogę sobie poradzić z @Entity, tzn. w ogóle po dodaniu zależności nie ma w moim IntelliJ javax.persistence, jak z tym sobie poradzić?
Projekt jest dostępny na githubie. Porównaj czy masz takie same zależności
github.com/matdabrowski/SpringBootTutorialUA-cam/blob/master/build.gradle
Jeśli masz tak samo i nadal nie działa, możesz jeszcze spróbować zaimportować projekt jeszcze raz (w Intellij jest zakładka Gradle stamtąd możesz zrobić reimport)
Doszedłem do momentu gdzie wpisuje "private final PostRepository postRepository;" (zaraz po stworzeniu repozytorium)dodaje " @RequiredArgsConstructor" i dalej kompilator pokazuje że coś jest nie tak. Z podpowiedzi jakie dostaje na "alt +enter" "Variable 'postRepository' might not have been initialized". Mam wrażene jak by lombok mi tego nie wstrzyknoł :/
Masz zainstalowany plugin lomboka w Intellij? Jeśli tak to spróbuj Build > Rebuild project
@@matdabski o ja gamoń jakis sposobem nie wgrałem lomboka :/, ale dzięki wielkie za szybka odpowiedz
Cześć, świetny kurs, tylko napotkałem jeden problem.
Otóż, przy próbie uruchomienia aplikacji wyskakuje mi komunikat:
Parameter 0 of constructor in com.example.demo.service.PostService required a bean of type 'com.example.demo.repository.PostRepository' that could not be found.
Mam jedną różnicę w porównaniu do przykładu z filmu. Nie używam bazy H2 a łączę się do lokalnej bazy na SQLServer. Do momentu dodania PostRepository wszystko było ok, jak dodałem to przy próbie wstrzyknięcia do PostService, błąd jak powyżej.
Czym to może być spowodowane?
Dodam, że interfejs PostRepository posiada adnotację @Repository, klasa PostService - @Service i @RequiredArgsConstructor, klasa PostController - @RestController i @RequiredArgsConstructor.
Dodatkowo w klasie Application w adnotacji @SpringBootApplication wyłączyłem przez exclude klasę DataSourceAutoConfiguration.class bo sypało błędami: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
Z jakiegoś powodu spring nie stworzył beana postRepozitory. Powinien to być interfejs który dziedziczy po JpaRepository. W sumie trudno powiedzieć co może być przyczyną
@@matdabski Dokładnie ta jest, publiczny interfejs dziedziczący po JpaRepository z adnotacją @Repository, wstrzykiwanie do serwisu robiłem zarówno przez pole, settera jak i konstruktor napisany przeze mnie i @RequiredArgsConstructor z Lomboka, różnica była taka, że zamiast "Parameter 0 of constructor..." komunikat mówił "Field ...".
Po pobraniu projektu z repo i pousuwaniu zbędnych plików, problem jest taki sam, na początku pluł mi się o wersję JVM, więc zmieniłem w ustawieniach z 1.8 na 11, czy to może być tego wina? Tak czy siak, spróbuję utworzyć nowy projekt i przejść od początku tutorial raz jeszcze na bazie H2 zamiast SQL Server.
@@waldemarjankowski4090 Hm, może przyczyną jest brak obsługi Lomboka. Masz włączone "Enable annotation processing"? Settings > Build > Compiller > Annotatnion pocessing
@@matdabski tak, mam. Wszystko działa do momentu wstrzyknięcia Repository do serwisu, wtedy komunikaty jak wyżej. Zastanawiam się czy w wersji 2.6.2 spring boota się nic nie zmieniło w stosunku do 2.2.6 przez co krzyczy.
Jakby komus przyszlo do glowy skorzystac z Swagger w wersji 3.x.y to inicjalizacja wyglada inaczej: github.com/springfox/springfox#migrating-from-earlier-snapshot
Super, dzięki za komentarz Marcin ;)
Importując wersje 3.0.0 Swaggera, nie ma annotacji @EnableSwagger2 ani żadnej podobnej. Możesz pomóc? SpringBoot 2.3.1
Najlepiej jak byś w takie sytuacji zaglądał do dokumentacji lub repo na githubie. Z tego co widzę w wersji 3 jest adnotacja @EnableOpenApi
github.com/springfox/springfox-demos/blob/master/boot-swagger/src/main/java/springfoxdemo/boot/swagger/Application.java
Cześć, prośba o pomoc:
Po dodatniu metody z id
public Post getSinglePost(long id) {
return postRepository.findById(id)
.orElseThrow();
}
Dostaje cały czas błąd:
Error:(21, 17) java: method orElseThrow in class java.util.Optional cannot be applied to given types;
required: java.util.function.Supplier
Ja używam Javy 11. Optional się trochę zmienił od Javy 11, doszły nowe metody. Metoda, której używam doszła w Javie 10. Po prostu nie masz tej metody w Javie 8, dlatego masz taki błąd.
@@matdabski rzeczywiście, masz rację. Przerobiłem wszystko pod findAllById i działa. Dzięki!
PS. Bardzo fajny kurs!
propozycja: testowanie
Co do testów, to zapraszam Cię do mojego kursu o testach jednostkowych w Junit5. Cały kurs pomaga wystartować z tematem testów od zera. Jest w nim zawarte bardzo dużo przydatnych informacji pomagających poradzić sobie z każdą sytuacją testową. Kurs aktualizowałem na początku czerwca. Doszły dwa ciekawe przykłady, między innymi przykład jak odpalić testy integracyjne. Zapraszam. kursy.nullpointerexception.pl/mini-kurs-testy-jednostkowe-start/
Chciałbym znaleźć komentarze przyporządkowane do konkretnego posta, dla którego daję id w zapytaniu. Jak powinien wyglądać taki mapping? Spring Data chyba tak super łatwo tego nie umożliwia?
Próbowałem z czymś takim, ale nie działa
@Service
@RequiredArgsConstructor
public class CommentDao {
@PersistenceContext
private final EntityManager entityManager;
public List findCommentsByPostId(long id) {
return entityManager.createQuery("SELECT c from Comment c JOIN Post p ON p.id = c.id where p.id = :id").setParameter("id",id).getResultList();
}
}
Cześć Grzegorz ;) Jak korzystasz z Spring Data, to prawie nigdy nie ma potrzeby korzystania ze Entity Managera. W 5 części, która będzie dostępna jutro o 9-tej. Dodaję do encji Comment pole postId. Bo w bazie ono istnieje od początku. I dodaję też CommentRepository, więc jak już masz repository i to pole to wystarczy w tym repository zrobić metodę np. findAllByPostId(Long postId). I to tyle ;)
@@matdabski Właśnie do tego pola nie mogłem się dostać, A Entity Managera dodałem, żeby pokombinować "obok". Teraz już wszystko jasne, dziękuję :)
Tabela wiele do wielu to zła praktyka.
Nie. Ale skoro tak twierdzisz, to uzasadnij swoje twierdzenie. Dlaczego według Ciebie to zła praktyka?
@@matdabski Czemu usuwasz moje komentarze ?
@@pawenowinski2072 Nie usuwam.
Uda£o sie zaimplementować mavena pod jdk8 pod eclipse. Od razu na starcie pojawia się problem, który (chyba) omawiasz w filmie o maven czyli brak możliwości (albo mocno utrudnione) tworzenia tasków. Jak zacząłem szukać rozwiązania to stwierdziłem, że szkoda mi dnia i po prostu zrobiłem komponent do seedowania bazy. Niestety tworzy to problem bo maven najpierw sie uruchamia a dopiero potem uaktualnia data.sql i apke trzeba uruchomić dwa razy na początku. Inaczej na razie nie umiem więc zostawiam tak jak jest. Kolejny problem to swagger (2.9.2) i akurat u mnie zadziało dopisanie odpowiedniej linii w application.properties: spring.mvc.pathmatch.matching-strategy=ant_path_matcher. Nie wiem dlaczego tak działa więc się nie wypowiadam. Generalnie typowa apka ale jak zwykle rewelacyjnie dopowiadasz co sie tak naprawde dzieje w trakcie uruchamiania itd itd. Mój największy problem jak na razie to rozumienie tych wszystkich komend w application.properties. Nie wiem skąd bierzesz te informacje na ich temat. Pewnie z jakiejś opasłej dokumentacji. Wielkie dzięki za bardzo wartościowy materiał.
Swaggera można podłączyć z innej nowszej paczki w wersji springdoc-openapi v1.6.6, chociaż nie wiem jak to wszystko będzie działało z tym co tutaj jest.
Co do propertiesów to jest dokumentacja do nich docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
Sciagnalem projekt z Gita i wywala mi blad, na stack over flow pisza ze moze byc bardzo duzo przyczyn, Pomocy ! :)
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
Masz zainstalowany serwer Mysql, jak tak to, czy jest uruchomiony?
Mam tylko zainstalowanego Workbench 8.0, spróbuje zainstalowac Server :)
Zainstlowalem server i jest błąd: Caused by: liquibase.exception.DatabaseException: java.sql.SQLException: Access denied for user 'youtube'@'localhost' (using password: YES)
terasz musze znalezc gdzie zmienic to haslo :)