JavaFx + Spring Boot + Gradle: Trzech bohaterów na jednej scenie

JavaFx + Spring Boot + Gradle: Trzech bohaterów na jednej scenie

Dziś mam przyjemność przedstawić Ci trzech bohaterów, których zapewne znasz, a przynajmniej o nich słyszałeś. Każdy z nich jest, lub chociaż pretenduje do tytułu mistrza w swojej klasie. Mowa oczywiście o tytułowych JavaFX, Spring Boot oraz spinającym cały projekt – Gradle. Zobacz jak w praktyce wygląda skonfigurowanie projektu od zera, który pozwala wykorzystać zalety całej trójki.

Agenda
  1. Czego dowiesz się z tego poradnika
  2. Tworzenie projektu Gradle/Java w IntelliJ IDEA
  3. Konfiguracja aplikacji Spring Boot w środowisku Gradle
  4. Integracja aplikacji JavaFX ze Spring Boot
  5. Chwila prawdy – czyli test opisanego rozwiązania

 

Źródła aplikacji

Aktualną wersję szablonu opisanego w tym poradniku możesz sklonować z mojego repozytorium:

 

1. Czego dowiesz się z tego poradnika

Całkiem niedawno stanąłem przed projektem napisania aplikacji Java przeznaczonej na desktopy. Dość naturalnym wyborem było użycie JavaFX jako głównego frameworka do GUI, tym bardziej, że wyparł on takie legendy jak SWING czy AWT. Obecnie JavaFX jest również rekomendowany przez Oracle jako podstawowy framework Java do programowania GUI na desktopach.

Przystępując do planowania oraz implementacji kolejnych wymagań, dość szybko zaczęło mi brakować tego, co znałem ze świata Spring MVC. Mianowicie, chodzi przede wszystkim o IOC oraz potężnego oręża narzędzi i rozwiązań jakimi obecnie włada Spring. Mam tu na myśli chociażby mechanizmy konfiguracji, profili, logowania, servletów oraz doskonałej integracji z całą masą standardów. Gdy tylko ten pomysł narodził się w mojej głowie,  już wiedziałem, że chcę Spring’a  w swoim projekcie. Tak też zrobiłem a teraz to opisuję.

Ostatnim z trójki jest Gradle – wisienka na torcie. Jest to potężne narzędzie do budowania projektów. Dla niewtajemniczonych – to taki Maven, tylko na sterydach. Gradle jest niesamowicie elastyczny z ekstremalnie prostą możliwością dostosowania do dowolnego projektu (praktycznie w każdym języku, nie tylko w Java).

W tym poradniku opisuję cały proces konfiguracji tytułowego projektu rozpoczynając od zgromadzenia programów i narzędzi, poprzez integrację Spring Boot z JavaFX, aż do testów finalnej aplikacji.

 

2. Tworzenie projektu Gradle/Java w IntelliJ IDEA

Na potrzeby tego wpisu jako IDE użyję IntelliJ IDEA oraz JDK8. Przystępując do tworzenia projektu warto przygotować sobie narzędzia i biblioteki, do których linki zamieszczam poniżej:

Gdy już zgromadzimy narzędzia możemy przystąpić do tworzenia samego projektu. Pierwszy wybór przed którym staniemy, to narzędzie do budowania projektu i zarządzania zależnościami bibliotek. Maven czy Gradle – na potrzeby tego poradnika wybrałem drugą opcję. Przystąpmy zatem do tworzenia projektu.

Na ekranie nowego projektu wybieramy Gradle oraz zaznaczamy Java w panelu dodatkowych bibliotek. Pamiętaj również o wybraniu odpowiedniego JDK.

 

Następnie podajemy metadane znane Ci już zapewne z projektów Maven – czyli grupę nazwę i wersję opisujące naszą aplikację.

 

Na koniec konfigurujemy Gradle. Najważniejsze to zaznaczenie opcji Use auto-import oraz  Use default gradle wrapper. Upewnij się również, że Gradle JVM wskazuje na aktualne JDK.

 

To byłoby na tyle jeśli chodzi o konfigurację projektu Gradle – możemy zatem przejść do kolejnego kroku.

 

3. Konfiguracja aplikacji Spring Boot w środowisku Gradle

Spring to niekwestionowany mistrz w kategorii frameworków IOC, dlatego też zdecydowałem się wykorzystać jego zalety oraz niesamowite możliwości w swoim projekcie. Integrację Spring Boot z Gradle opisałem dokładnie w poniższym wpisie.

 

Bazując na przedstawionym wpisie należy zmodyfikować plik build.gradle do postaci zamieszczonej poniżej oraz utworzyć klasę MyApp.java w celu przetestowania, czy wszystko poszło jak należy.

 

 

Po uruchomieniu aplikacji powinniśmy zobaczyć poniższy rezultat, czyli komunikat Hello World oraz zakończenie aplikacji z kodem 0.

 

4. Integracja aplikacji JavaFX ze Spring Boot


Zacznijmy od stworzenia formatki sample.fxml w folderze resources/fxml składającej się z panelu z umieszczonym wewnątrz komponentem WebView. Wykorzystamy go w dalszej części,  w celu sprawdzenia integracji ze Spring Boot.

 

Kolejnym krokiem zbliżającym nas do celu jest zmodyfikowanie klasy MyApp.java, która pierwotnie była tylko aplikacją Spring Boot, do postaci aplikacji JavaFX będącej pod kontrolą Spring’a. W tym celu zmodyfikuj ją tak, aby dziedziczyła po klasie javafx.application.Application.

 

Następnie przygotuj kilka pól pomocniczych, które wykorzystamy w metodach implementowanych w dalszych krokach.

 

Zmianie ulega przede wszystkim sposób uruchomienia aplikacji. Obecnie w metodzie main mamy kod startujący kontekst Springa. Należy zmienić go na metodę launch startującą aplikację JavaFx, a sam start Springa zrobimy w kolejnym kroku.

 

Płynnie przechodzimy do implementacji najważniejszej metody z punktu widzenia integracji JavaFX ze Spring Boot, a mianowicie init. Uruchamiamy w niej kontekst Spring’a, tworzymy FXMLLoader oraz przekazujemy kontrolę nad tworzonymi bean’ami do fabryki bean’ów Spring’a.

 

Metoda start jest w zasadzie standardowym kodem spotykanym w czystej aplikacji JavaFX. Zawiera wczytanie formatki oraz przygotowanie i wyświetlenie sceny.

 

Ostatnim elementem z punktu widzenia integracji JavaFx ze Spring Boot jest zatrzymanie Springa podczas zatrzymywania aplikacji JavaFx. Efekt ten osiagamy nadpisując metodę stop poniższeym kodem.

 

Dla czytelności postanowiłem usunąć  CommandLineRunner. Poniżej znajduje się finalna wersja kodu aplikacji będąca już w pełni funkcjonalną hybrydą JavaFx oraz Spring Boot.

 

5. Chwila prawdy – czyli test opisanego rozwiązania


Najbardziej klasycznym przypadkiem, który również świetnie nadaje się na test opisanej integracji, jest moim zdaniem przygotowanie bean’a kontrolera formatki sample.fxml, oraz jego dostarczenie za pomocą fabryki bean’ów Spring’a. Zadaniem wspomnianego kontrolera będzie załadowanie strony mojego bloga w komponencie WebView. Adres strony będzie dostarczony z pliku application.properties.

Zacznijmy zatem od przygotowania pliku application.properties o następującej treści

 

Następnie tworzymy kontroler oraz wpinamy go w sample.fxml.

 

Warto zwrócić uwagę na linię 13 kontrolera, gdzie wstrzykujemy wartość property w pole kontrolera, oraz linie 16-19, w których wykorzystujemy je w celu załadowania strony internetowej w komponencie WebView.

 

Uwaga!
Kontroler musi być koniecznie oznaczony adnotacją @Controller tak aby Spring mógł go wykryć i powołać. W przeciwnym wypadku dostaniemy wyjątek:

 

W tym momencie nasza aplikacja nadaje się na ostateczny test. Jeśli postępowałeś według tego poradnika, to struktura projektu powinna być analogiczna do poniższej.

 

Nie pozostaje nam już nic innego jak uruchomić naszą aplikację i trzymać kciuki aby otrzymać poniższy rezultat.

 

To byłoby na tyle jeśli chodzi o ten wpis. Jeśli podoba Ci się konwencja i chciałbyś więcej takich wpisów, zostaw mi komentarz z tematem, który Cię interesuje, a ja postaram się go przygotować. Tymczasem możesz mi pomóc dotrzeć do większej liczby odbiorców udostępniając ten wpis.
Z góry dziękuję.

1
Leave a Reply

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
trackback

[…] JavaFx + Spring Boot + Gradle: Trzech bohaterów na jednej scenie […]

Close Menu