1. 程式人生 > >聊聊Spring boot2.X開發環境搭建和基本開發

聊聊Spring boot2.X開發環境搭建和基本開發

nat profile c中 ddb 被占用 bae nor 可能 占用

對Spring Boot的開發環境進行搭建,並對它的特點做進一步的了解,才能更好地對Spring Boot有更深入的介紹。但是無論如何都需要先來搭建Spring Boot的工程。

搭建Spring Boot開發環境

使用Spring Boot,首先需要搭建一個快速開發的工程環境。Spring Boot工程的創建存在多種方式,但是因為當前Eclipse和IntelliJ IDEA這兩種IDE的廣泛應用,所以本書只介紹這兩種IDE環境下的搭建。

技術分享圖片

搭建Eclipse開發環境

首先找到Eclipse的菜單Help→Eclipse Marketplace,打開這個菜單後,可以看到一個新的窗口,然後選擇標簽頁Popular,從中找到Spring Tool Suite(STS)的插件,如圖1-1所示。

這樣就可以點擊安裝STS插件了,通過它可以很方便地引入Spring Boot的starter,而starter會引入對應的依賴包和服務器,這樣就能夠幫助我們快速地搭建開發環境。

下面讓我們使用它創建一個工程。首先點擊熟悉的菜單File→New→Project,然後輸入spring過濾一些無關的內容,再選用Spring Starter Project,點擊Next,創建項目,如圖1-2所示。

於是它會再打開一個新的對話框,如圖1-3所示。

圖2-3中畫框的地方是我根據自己需要進行的自定義,其中選擇了使用War形式的打包,這意味著將使用的是一個帶有JSP工程的項目。在實際的操作中,讀者也需要根據自己的情況來定義它們。做完這些工作後,就可以點擊Next進行下一步了,這樣它又會彈出另外一個窗口,如圖1-4所示。

技術分享圖片

圖1-1 安裝STS插件

技術分享圖片

圖1-2 創建Spring Boot工程

技術分享圖片

圖1-3 配置Spring Boot工程

技術分享圖片

圖1-4 選擇依賴的starter

這裏選擇AOP和Web,只是做最簡單的項目而已,因此沒有引入太多的內容。在現實的開發中,可能還需要選擇NoSQL開發工具,如Redis、MongoDB等,還有數據庫,如MySQL,以及持久層Hibernate或者MyBatis等項目的依賴,這些都是開發中經常用到的。當你選中所需要的包後,就可以直接點擊Finish,這個時候一個新的Spring Boot工程就建好了,如圖1-5所示。

技術分享圖片

圖1-5 新的Spring Boot工程

從圖1-5可以看到它是一個Maven項目,其中pom.xml文件已經建好,而且給我們創建了帶有main方法的Chapter2Application.java文件和初始化Servlet的ServletInitializer.java文件。這裏通過Chapter2Application就可以運行Spring Boot工程了。下面再打開工程中的pom.xml文件,就可以看到這些代碼,如代碼清單1-1所示。

代碼清單1-1 項目中的pom.xml文件


技術分享圖片


技術分享圖片

這些代碼是STS插件根據你選擇的starter依賴來創建的,這樣關於Eclipse搭建的開發環境就結束了。此時只需要使用Java Application的形式運行Chapter2Application就可以啟動Spring Boot項目。

搭建IntelliJ IDEA開發環境

首先是啟動IntelliJ IDEA開發環境,然後選擇Create New Project,就可以看到一個新的窗口。我們選擇Spring Initializr,並且將JDK切換為你想要的版本,如圖1-6所示。

技術分享圖片

圖1-6 使用IntelliJ IDEA創建Spring Boot工程

點擊Next,也會彈出另外一個窗口,它將允許我們進行一定的配置,如圖1-7所示。

技術分享圖片

圖1-7 配置Spring Boot項目

同樣,圖中加框的地方是我根據自己的需要進行修改的內容。註意,這裏還是選擇了以War打包的形式,然後點擊Next,又到了可以選擇starter的窗口,如圖1-8所示。

技術分享圖片

圖1-8 選擇對應的starter

也與Eclipse一樣,可以根據自己的需要選擇對應的starter進行依賴,IntelliJ IDEA也會為你建好工程,如圖1-9所示。

你也可以看到一個建好的類Chapter2Application、ServletInitializer和Maven的pom.xml文件。運行Chapter2Application就可以啟動Spring Boot工程,而pom.xml則配置好了你選中的starter依賴,這樣就能夠基於IntelliJ IDEA開發Spring Boot工程了。

技術分享圖片

圖1-9 IntelliJ IDEA創建Spring Boot工程

到這裏,如果你想使用Jetty或者Undertow作為服務器,又或者說你想切換後臺日誌中的商標,那麽可以參考附錄中的內容。

Spring Boot的依賴和自動配置

在上節中已經介紹了如何搭建Spring Boot工程,下面需要討論它為什麽在很少的配置下就能夠運行。

下面以最常用的Spring MVC為例進行說明。首先打開Maven的本地倉庫,找到對應Spring Boot的文件夾,可以看到圖1-10所示的目錄。

技術分享圖片

圖1-10 Spring Boot的Maven本地倉庫

這裏先談spring-boot-start-web的內容,未來還會談到spring-boot-autoconfigure文件夾的內容,所以圖 1-10 中一並加了框。打開spring-boot-start-web文件夾,就可以看到一個名為spring-boot- starter-web-2.0.0.RELEASE.pom的文件,打開它就可以看到代碼清單1-2所示的代碼。

代碼清單1-2 spring-boot-starter-web的pom.xml文件

技術分享圖片

代碼中的中文註釋是我加入的。從這裏可以看出,當加入spring-boot-starter-web後,它會通過Maven將對應的資源加載到我們的工程中,這樣便能夠形成依賴。但是這樣還不足以運行Spring MVC項目,要運行它還需要對Spring MVC進行配置,讓它能夠生產Spring MVC所需的對象,才能啟用Spring MVC,所以還需要進一步探討。

為了探討Spring MVC在Spring Boot自動配置的問題,首先在本地下載的Maven倉庫的目錄spring-boot-autoconfigure中找到

spring-boot-autoconfigure-2.0.0.RELEASE-sources.jar的包。它是一個源碼包,把它解壓縮出來,打開它目錄下的子目錄後,我們就可以看到許多配置類,如圖2-11所示。

技術分享圖片

圖1-11 Spring Boot的默認配置類

這裏可以看到存在很多的類,其中加框的類DispatcherServletAutoConfiguration就是一個對DispatcherServlet進行自動配置的類。因為本書不是源碼分析的書,所以不對註解這些內容進行深入的探討,只是截取DispatcherServletAutoConfiguration源碼中的一個內部類DispatcherServletConfiguration對Spring Boot的自動配置做最基本的講解,如代碼清單1-3所示。

代碼清單1-3 部分源碼分析

技術分享圖片

註意上述代碼中加粗註解的註釋,這些中文註釋是我加入的,為的是更好地說明Spring Boot的自動配置功能。通過上面的代碼,可以看到Spring Boot內部已經自動為我們做了很多關於DispatcherServlet的配置,其中的@EnableConfigurationProperties還能夠在讀取配置內容的情況下自動生成Spring MVC所需的類,有關這些內容的討論可以參考附錄。到這裏,應該明白為什麽幾乎在沒有任何配置下就能用Spring Boot啟動Spring MVC項目,這些都是Spring Boot通過Maven依賴找到對應的jar包和嵌入的服務器,然後使用默認自動配置類來創建默認的開發環境。但是有時候,我們需要對這些默認的環境進行修改以適應個性化的要求,這些在Spring Boot中也是非常簡單的,正如@EnableConfigurationProperties註解那樣,它允許讀入配置文件的內容來自定義自動初始化所需的內容,下節將探討這個問題。

使用自定義配置

上節討論了Spring Boot存在自動裝配組件和自定義的配置,這些它都給予了開發者默認的約定配置項。關於這些內容,可以在它公布的網址上看到所有的配置項,網址是http://docs.spring.io/spring- boot/docs/current-SNAPSHOT/reference/htmlsingle/#appendix。這些配置項多達300多項,所以十分繁復,好在我們並不需要全部去配置,只是根據自己工程的需要引入對應的starter,對其進行必要的配置就可以了。

本書不會像流水賬那樣羅列這些配置項,因為這些很無趣也沒有必要,而只是根據講解的需要,引入對應的stater,才會討論對應的配置項。將來在討論數據庫、NoSQL等內容時,才會討論對應的配置項。這裏需要我們記住的是通過這些約定的配置就可以在很大程度上自定義開發環境,以適應真實需求。這就是Spring Boot的理念,配置盡量簡單並且存在約定,屏蔽Spring內部的細節,使得Spring能夠開箱後經過簡單的配置後即可讓開發者使用,以滿足快速開發、部署和測試的需要。

如果你按照上述使用Eclipse或者IntelliJ IDEA進行新建工程,那麽可以在項目中發現它還會為你創建一個屬性文件application.properties,如圖2-12所示。

它是一個默認的配置文件,通過它可以根據自己的需要實現自定義。例如,假設當前8080端口已經被占用,我們希望使用8090端口啟動Tomcat,那麽只需要在這個文件中添加一行:

技術分享圖片

圖1-12 Spring Boot的配置文件

這樣以Java Application的形式運行Chapter2Application就可以看到Spring Boot綁定的Tomcat的啟動日誌:

技術分享圖片

註意,通過加粗的這行日誌可以看到Tomcat是以8090端口啟動的,相信讀者明白了。也就是說,我們只需要修改配置文件,就能將開發的默認配置變為自定義配置。

事實上,Spring Boot的參數配置除了使用properties文件之外,還可以使用yml文件等,它會以下列的優先級順序進行加載:

命令行參數;

來自java:comp/env的JNDI屬性;

Java系統屬性(System.getProperties());

操作系統環境變量;

RandomValuePropertySource配置的random.*屬性值;

jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件;

jar包內部的application-{profile}.properties或application.ym(帶spring.profile)配置文件;

jar包外部的application.properties或application.yml(不帶spring.profile)配置文件;

jar包內部的application.properties或application.ym(不帶spring.profile)配置文件;

@Configuration註解類上的@PropertySource;

實際上,yml文件的配置與properties文件只是簡寫和縮進的差別,因此差異並不大,所以本書統一使用properties文件進行配置。對於需要使用yml文件的讀者,只是需要稍加改動即可。

開發自己的Spring Boot項目

上面我們修改了服務器的啟動端口,有時候還需要修改Spring MVC的視圖解析器(ViewResolver)。Spring MVC的視圖解析器的作用主要是定位視圖,也就是當控制器只是返回一個邏輯名稱的時候,是沒有辦法直接對應找到視圖的,這就需要視圖解析器進行解析了。在實際的開發中最常用的視圖之一就是JSP,例如,現在控制器中返回一個字符串“index”,那麽我們希望它對應的是開發項目的/WEB-INF/jsp/index.jsp文件。如果你還對Spring MVC不熟悉,那也沒有關系,未來我們還會談到它,這裏的代碼很簡單,你只需要依葫蘆畫瓢就可以體驗運行Spring Boot項目了。下面的主要任務就是如果通過Spring Boot完成這個功能。首先我們需要在Maven的pom.xml中加入JSP和JSTL的依賴包,如代碼清單1-4所示。

代碼清單1-4 新增JSP和JSTL的Maven依賴配置

技術分享圖片

為了配置視圖解析器(ViewResolver),將application.properties文件修改為如代碼清單`-5所示。

代碼清單1-5 定義視圖前後綴

技術分享圖片

這裏的spring.mvc.view.prefix和spring.mvc.view.suffix是Spring Boot與我們約定的視圖前綴和後綴配置,意思是找到文件夾/WEB-INF/jsp/下以.jsp為後綴的JSP文件,那麽前綴和後綴之間顯然又缺了一個文件名稱,在Spring MVC機制中,這個名稱則是由控制器(Controller)給出的,為此新建一個控制器IndexController,其代碼如代碼清單1-6所示。

代碼清單1-6 開發控制器

技術分享圖片

這裏定義了一個映射為/index的路徑,然後方法返回了“index”,這樣它就與之前配置的前綴和後綴結合起來找對應的jsp文件,為此我們還需要開發一個對應的jsp文件,為此我們先再建一個/webapp/WEB-INF/jsp/index.jsp文件,如代碼清單1-7所示。

代碼清單1-7 開發視圖(/webapp/WEB-INF/jsp/index.jsp)

技術分享圖片

這樣我們就完成了一個簡單的控制器,並且讓視圖解析器找到視圖的功能。從上面來看定義視圖解析器,在Spring Boot中只需要通過配置文件定義視圖解析器的前後綴即可,而無須任何代碼,這是因為Spring Boot給了我們自定義配置項,它會讀入這些自定義的配置項,為我們生成Spring MVC中的視圖解析器。正如它所承諾的盡可能地配置Spring開發環境,然後再看到即將運行Chapter2Application.java文件,如代碼清單1-8所示。

代碼清單1-8 Spring Boot運行文件Chapter2Application

技術分享圖片

這裏的註解@SpringBootApplication標誌著這是一個Spring Boot入門文件。加粗的代碼則是以Chapter2Application類作為配置類來運行Spring Boot項目,於是Spring Boot就會根據你在Maven加載的依賴來完成運行了。接下來我們以Java Application的形式運行類Chapter2Application,就可以看到Tomcat的運行日誌。由於已經把端口修改為了8090,因此打開瀏覽器後輸入http://localhost:8090/index,就可以看到運行的結果如圖1-13所示。

技術分享圖片

圖1-13 測試視圖解析器

這樣我們就搭建完成Spring Boot的開發環境了。因為Spring Boot是基於Spring原理基礎之上的,所以在討論Spring Boot時,也十分有必要介紹Spring的技術原理,這樣才能知其然,亦知其所以然。這些是後續章節的任務了。

技術分享圖片

《深入淺出Spring Boot 2.x》

楊開振 著

Spring框架是Java EE開發的事實標準,而Spring Boot是業界最流行的微服務開發框架。本書從一個最簡單的工程開始講解Spring Boot企業級開發,其內容包含全註解下的Spring IoC和AOP、數據庫編程、數據庫事務、NoSQL技術、Spring MVC、Spring 5新一代響應式框架WebFlux、REST風格和Spring Cloud分布式開發等。

技術分享圖片

掃碼關註我們

在“異步社區”後臺回復“關註”,即可免費獲得2000門在線視頻課程


聊聊Spring boot2.X開發環境搭建和基本開發