Advertisement
Guest User

Untitled

a guest
May 24th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.87 KB | None | 0 0
  1. <h2 style="text-align: justify;">Wstęp</h2>
  2. <h1 style="text-align: justify;"><img class=" wp-image-82 alignleft" src="https://pikdbmanager.files.wordpress.com/2016/05/spring-boot-logo.png" alt="spring-boot-logo" width="179" height="179" /></h1>
  3. &nbsp;
  4. <p style="text-align: justify;">Spring Boot to jeden z modułów należących do Spring Framework, czyli popularnego frameworku dla platformy Java EE. Podobnie, jak cały ekosystem Springa, tak również Spring Boot został stworzony przez programistów firmy Pivotal. Jest on bardzo ceniony przez wielu deweloperów ze względu na prostotę i wygodę tworzenia aplikacji webowych. W tym artykule omówię pokrótce z jakich powodów powstał Spring Boot, opiszę krok po kroku jak utworzyć, zbudować i uruchomić nowy projekt wykorzystujący tę technologię,  a na koniec odniosę się do tego kiedy warto, a kiedy nie warto korzystać z tego frameworku.</p>
  5.  
  6. <h2 style="text-align: justify;">Jakie cele przyświecały twórcom Spring Boota?</h2>
  7. <p style="text-align: justify;">Zazwyczaj każdy nowy projekt z wykorzystaniem biblioteki Spring Framework rozpoczyna się od utworzenia kilkunastu, a nawet kilkudziesięciu plików konfiguracyjnych ( klas, plików xml i innych), które są niezbędne do uruchomienia aplikacji. Niezbędna jest również konfiguracja serwera aplikcaji np. Tomcata. To wszystko sprawia, że Spring, który miał być odpowiedzią na dużą złożoność Javy EE sam wymaga od użytkowników tworzenia niekiedy skomplikowanych konfiguracji, co często sprowadza się do kopiowania klas konfiguracyjnych z poprzednich projektów (<em>tzw.</em> <em>boilerplate code</em>).</p>
  8. <p style="text-align: justify;">Zaczęto więc zastanawiać się dlaczego klasy konfiguracyjne nie mogą być elementem samego frameworku Springa. W końcu programiści pracujący nad rozwojem Springa stwierdzili... czemu nie? I w ten oto sposób powstał Spring Boot, który wyszedł naprzeciw potrzebom programistów aplikacji webowych.</p>
  9.  
  10. <h2 style="text-align: justify;">Czym jest dokładnie i na jakiej zasadzie działa Spring Boot?</h2>
  11. <p style="text-align: justify;">Spring Boot to framework zawierający zbiór predefiniowanych konfiguracji, które rozwiązują najogólniejsze problemy podczas tworzenia aplikacji, głównie związane z konfiguracją komponentów np. konfiguracja Entity Managera, konfiguracja Spring Security i wiele, wiele innych.</p>
  12. <p style="text-align: justify;">Skąd zatem Spring Boot wie, które konfiguracje są nam potrzebne, a które nie? Na starcie budowania projektu Spring Boot skanuje classpath naszego serwera aplikacji. Przeglądając po kolei wszystkie klasy i zależności sprawdza czy posiada on w swojej bibliotece konfigurację do danej i dołącza ją do naszego projektu. Dla przykładu, jeśli do naszego projektu dodaliśmy zależność Spring Security, to Spring Boot sam skonfiguruje wszystko, co normalnie sami powinniśmy skonfigurować, aby móc korzystać ze Spring Security oraz dołączy te pliki konfiguracyjne do naszego projektu.</p>
  13. <p style="text-align: justify;">Kolejnym udogodnieniem, które wprowadził Spring Boot to rozwiązanie standardowych problemów, z którymi stykają się programiści wdrażając aplikację na produkcję. Gotowe rozwiązania dostarczane przez ten framework to między innymi <em>Health Endpoint, </em>który stwierdza czy nasza aplikacja działa poprawnie oraz możliwość sprawdzenia czy działania Garbage Collectora nie zużywają zbyt dużo pamięci.</p>
  14.  
  15. <h2 style="text-align: justify;">Pierwszy projekt</h2>
  16. <p style="text-align: justify;">Przedstawię teraz w jaki sposób możemy utworzyć prosty projekt z wykorzystaniem Spring Boota. Jako IDE posłuży mi Intellij Idea, które gorąco polecam szczególnie dla tych którzy na codzień korzystają z Eclipsa i nie mieli jeszcze przyjemności pracy z innym IDE. Kod źródłowy tego prostego projektu znajduje się pod <a href="https://github.com/kstanisz/SpringBootTutorial" target="_blank">tym adresem</a>.</p>
  17. <p style="text-align: justify;">Po uruchomieniu Intellij Idea i wybraniu opcji <em>Create New Project </em>wybieramy zakładkę <em>Spring Initializr. </em>W okienku wybieramy SDK naszego projektu, adres <em>Initializr Service URL</em> pozostawiamy bez zmian.</p>
  18. <p style="text-align: justify;"><img class="alignnone size-full wp-image-252" src="https://pikdbmanager.files.wordpress.com/2016/05/project11.png" alt="project1.PNG" width="816" height="657" /></p>
  19. <p style="text-align: justify;">Klikamy <em>Next </em>i w następnym oknie podajemy informacje dotyczące naszej aplikacji: nazwę, typ (Maven, Gradle), sposób pakowania (jar, war), wersję Javy i inne podstawowe dane. Przykładowe okno jest zaprezentowane na obrazku poniżej.</p>
  20. <p style="text-align: justify;"><img class="alignnone size-full wp-image-262" src="https://pikdbmanager.files.wordpress.com/2016/05/project2.png" alt="project2.PNG" width="819" height="656" /></p>
  21. <p style="text-align: justify;">Klikamy <em>Next. </em>Przechodzimy teraz do najciekawszego etapu tworzenia projektu, czyli do okna, w którym wskazujemy Spring Bootowi, które zależności ma włączyć do naszego projektu juz na starcie, a co za tym idzie dołączyć do projektu ich podstawowe konfiguracje. Jak widać na poniższym obrazku wybór technologii jest naprawdę spory. Występuje tu cała lista technologii wspieranych przez Springa. Załóżmy, że nasz projekt będzie prostą aplikacją korzystająca z bazy danych MySQL wykorzystując przy tym framework Hibernate. Wybieramy zatem spośród podanych opcji: JPA oraz MySQL z kategorii SQL.</p>
  22. <p style="text-align: justify;"><img class="alignnone size-full wp-image-288" src="https://pikdbmanager.files.wordpress.com/2016/05/project31.png" alt="project3" width="815" height="661" /></p>
  23. <p style="text-align: justify;">Klikamy <em>Next</em>, a w następnym okienku <em>Finish. </em>Gratulacje! Właśnie utworzyłeś swój pierwszy projekt z wykorzystaniem Spring Boota.</p>
  24. <p style="text-align: justify;">Na wstępie warto zwrócić uwagę na plik Mavena pom.xml, który został wygenerowany na starcie przez Spring Boota zgodnie z podanymi przez nas wcześniej preferencjami. Możemy zauważyć między innymi dodane wsparcie dla Spring Boota:</p>
  25.  
  26. <pre>&lt;parent&gt;
  27. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  28. &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
  29. &lt;version&gt;1.3.5.RELEASE&lt;/version&gt;
  30. &lt;relativePath/&gt;
  31. &lt;/parent&gt;</pre>
  32. <p style="text-align: justify;">Poza tym Spring Boot dodał do pliku pom.xml zależności, które będą nam potrzebne w realizacji projektu. Jak pamiętamy, w oknie z wyborem technologii wybraliśmy JPA oraz MySQL i jak łatwo zauważyć zależności te znajdują się w podanym pliku. Oprócz nich Spring Boot domyślnie dodał nam zależności <em>spring-boot-starter-web</em>, <em>spring-boot-starter-tomcat</em> oraz <em>spring-boot-starter-test.</em></p>
  33.  
  34. <pre>&lt;dependencies&gt;
  35. &lt;dependency&gt;
  36. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  37. &lt;artifactId&gt;spring-boot-starter-data-jpa&lt;/artifactId&gt;
  38. &lt;/dependency&gt;
  39. &lt;dependency&gt;
  40. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  41. &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
  42. &lt;/dependency&gt;
  43. &lt;dependency&gt;
  44. &lt;groupId&gt;mysql&lt;/groupId&gt;
  45. &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
  46. &lt;scope&gt;runtime&lt;/scope&gt;
  47. &lt;/dependency&gt;
  48. &lt;dependency&gt;
  49. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  50. &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt;
  51. &lt;scope&gt;provided&lt;/scope&gt;
  52. &lt;/dependency&gt;
  53. &lt;dependency&gt;
  54. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  55. &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
  56. &lt;scope&gt;test&lt;/scope&gt;
  57. &lt;/dependency&gt;
  58. &lt;/dependencies&gt;</pre>
  59. <p style="text-align: justify;">Zależność <em>spring-boot-starter-web</em> wynika z faktu, iż aplikacje wykorzystujące Spring Boota są domyślnie aplikacjami webowymi, dlatego też zostaną nam dodane wszystkie podstawowe zależności związane z tworzeniem aplikacji webowych takie jak np. Spring MVC. Z podobnego względu dołączona jest od razu zależność serwera aplikacyjnego Tomcat. Kolejną z zalet Spring Boota jest właśnie obecność wbudowanego serwera Tomcat, co daje wiele wygody, gdyż nie musimy już konfigurować go osobno. Spring Boot wykonuje całą pracę za nas. Ostatnią ze wspomnianych przeze mnie zależności jest s<em>pring-boot-starter-test</em>, która dostarcza nam Springowe beany wspomagające testowanie aplikacji.</p>
  60. <p style="text-align: justify;">Kolejną ważna kwestią, na którą warto zwrócić uwagę w szkielecie projektu jest główna klasa naszej aplikacji z metodą <em>main.</em></p>
  61.  
  62. <pre>@SpringBootApplication(scanBasePackages = "com.springboottutorial")
  63. @EnableJpaRepositories(basePackages = "com.springboottutorial")
  64. public class SpringBootTutorialApplication {
  65.  
  66. public static void main(String[] args) {
  67. SpringApplication.run(SpringBootTutorialApplication.class, args);
  68. }
  69. }</pre>
  70. <p style="text-align: justify;">Aby nasz projekt działał poprawnie należy opatrzyć naszą klasę dwoma adnotacjami. Pierwsza z nich wskazuje na paczki, które Spring ma skanować w poszukiwaniu beanów. Druga z nich oznajmia, że będziemy korzystać z JPA i dla jakich paczek ma zostać włączona ta obsługa. Po uruchomieniu tej klasy wystartuje cała nasza aplikacja. Proste, prawda? O budowaniu i uruchamianiu aplikacji opowiem jednak nieco później.</p>
  71.  
  72. <h2 style="text-align: justify;">Dostosowywanie konfiguracji pod własne potrzeby</h2>
  73. <p style="text-align: justify;">Co w przypadku, gdy utworzona przez Spring Boota konfiguracja nam nie odpowiada i chcielibyśmy w niej coś zmienić? To również bardzo proste. Domyślnie aplikacja startuje na porcie 8080. Co w sytuacji gdy chcielibyśmy to zmienic i wystartować aplikację na innym porcie np. 8090. W takim wypadku przechodzimy do pliku <strong>application.properties </strong>w folderze <em>resources</em> i dodajemy do niego linijkę:</p>
  74.  
  75. <pre>server.port = 8090</pre>
  76. <p style="text-align: justify;">W ten oto sposób przy następnym zbudowaniu projektu i jego uruchomieniu nasza aplikacja wystartuje na porcie 8090. W podobny sposób możemy zmienić wiele innych ustawień na przykład konfigurację bazy danych MySQL oraz Hibernate'a. Przykładowa konfiguracja znajduje się poniżej.</p>
  77.  
  78. <pre>spring.datasource.url = jdbc:mysql://localhost:3306/springboottutorial
  79. spring.datasource.username = username
  80. spring.datasource.password = password
  81.  
  82. spring.jpa.show-sql = true
  83. spring.jpa.hibernate.ddl-auto = create
  84. spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
  85. spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect</pre>
  86. <p style="text-align: justify;">Aby nasz projekt uruchomił się poprawnie musimy dodać konfigurację bazy danych w pliku application.properties.</p>
  87. <p style="text-align: justify;">Listę wszystkich właściwości, które możemy zmieniać w pliku application.properties możemy znaleźć na <a href="http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html">tej stronie</a>.</p>
  88. <p style="text-align: justify;">W przypadku, gdy potrzebujemy bardziej dostosowanej konfiguracji i edycja pliku application.properties nam nie wystarczy możemy po prostu utworzyć własnego beana z klasą konfiguracyjną, która dziedziczy po domyślnej klasie konfiguracyjnej i np. przesłonić daną metodę z klasy bazowej.</p>
  89.  
  90. <h2>Budowanie i uruchamianie aplikacji</h2>
  91. <p style="text-align: justify;">Aplikację wykorzystującą Spring Boota możemy zbudować dzięki Mavenowi i uruchomić poleceniem z konsoli:</p>
  92.  
  93. <pre>mvn clean spring-boot:run</pre>
  94. <p style="text-align: justify;">W Intellij Idea wystarczy przejść do zakładki <em>Maven Projects</em> i kliknąć w opcję <em>Execute Maven Goal, </em>a następnie wpisać polecenie w odpowiednim polu jak widać na obrazku poniżej.</p>
  95. <img class="alignnone size-full wp-image-447" src="https://pikdbmanager.files.wordpress.com/2016/05/project4.png" alt="project4" width="748" height="167" />
  96.  
  97. Po kliknięciu <em>Execute </em>nasza aplikacja powinna poprawnie się zbudować i uruchomić na podanym przez nas porcie lub domyślnie na porcie 8080.
  98. <h2>Kiedy używać, a kiedy nie używać Spring Boota?</h2>
  99. <p style="text-align: justify;">Spring Boot doskonale sprawdza się w mniejszych projektach, gdzie chcemy szybko wystartować z naszą aplikacją i nie mamy wysokich wymagań co do konfiguracji beanów w naszej aplikacji. Problem może wystąpić w dużych, złożonych projektach gdzie musimy dopracować każdy detal konfiguracyjny. Korzystanie ze Spring Boota będzie wtedy nienajlepszym rozwiązaniem, ponieważ i tak będziemy musieli sami w większej części tworzyć konfiguracje dostosowane do naszych potrzeb.</p>
  100.  
  101. <h2>Podsumowanie</h2>
  102. <p style="text-align: justify;">Spring Boot jest bardzo przydatnym modułem Spring Framework ułatwiającym w znacznej mierze pracę programiście. Posiada on dwie główne cechy, którymi są dostarczanie gotowych, podstawowych konfiguracji do klas i zależności znajdujących się w classpathie projektu, a także wspomaga wdrażanie aplikacji na produkcję. Spring Boot jest dobrym rozwiązaniem dla mniejszych projektów, gdzie nie ingerujemy za bardzo w podstawową konfigurację beanów.</p>
  103.  
  104. <h2>Przydatne linki</h2>
  105. <ul>
  106. <li><a href="https://github.com/kstanisz/SpringBootTutorial" target="_blank">Kod źródłowy przykładowego projektu</a></li>
  107. <li><a href="http://projects.spring.io/spring-boot/" target="_blank">Dokumentacja Spring Boota</a></li>
  108. <li><a href="https://github.com/spring-projects/spring-boot" target="_blank">Spring Boot na Githubie</a></li>
  109. </ul>
  110. &nbsp;
  111.  
  112. &nbsp;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement