SpringBoot就是這麼簡單

Java3y發表於2018-03-20

一、SpringBoot入門

今天在慕課網中看見了Spring Boot這麼一個教程,這個Spring Boot作為JavaWeb的學習者肯定至少會聽過,但我是不知道他是什麼玩意。

只是大概瞭解過他是用起來很方便,不用什麼配置的。於是我就花了點時間去跟著學習了。

視訊地址:http://www.imooc.com/learn/767

教程中的程式碼:https://gitee.com/liaoshixiong/girl

1.1SpringBoot啟動

在教程中,啟動SpirngBoot有三種方式:

  • 在idea中直接使用啟動(最常用)
  • 使用mvn 命令來啟動
  • 使用mvn編譯,而後在class目錄生成jar包,使用Java命令來啟動

1.2專案屬性配置

使用SpringBoot作為我們的框架,連Tomcat都不用自己配置。Tomcat預設的埠是8080。那如果我們要改埠的話,怎麼改呢??專案中可能有一些屬性變數,那怎麼配置呢???

SpringBoot是提供了application.properties這種配置檔案供我們使用的。

但是,我們可以有更好的配置方式,使用yml檔案,這種配置檔案使用起來就更加簡潔了。

在yml檔案中配置屬性,那麼我們在Controller中可以使用@value屬性來進行獲取。

如果我們的配置屬性是有規律的(是分類的),比如為System系統配置的屬性,我們可以建立一個Java類來進行管理。

那麼在獲取的時候就不需要使用@value屬性來分別獲取了。直接獲取Java類的成員變數就行了。

當然了,這裡涉及到了兩個註解:

  • @configurationProperties
  • @Component

再舉個例子,我們的生產環境和開發環境的配置變數很有可能是不一樣的,比如:我們的path變數在開發環境中是:http://localhost:8080。而我們的生產環境中的path路徑是:zhognfucheng.site。這就造成了差異,在springBoot中,這種差異就很好解決了。

  • 可以將開發環境的配置檔案和生產環境的配置檔案分開,使用總配置檔案指定使用的是哪個配置檔案。
  • 在使用java變數啟動Springboot專案的時候,可以指定使用哪個配置檔案。

二、回顧

2.1Controller的使用

SpringBoot已經不推薦使用JSP了,推薦使用模版來返回頁面。thymeleaf這個模版,如果在返回頁面的時候出錯了,看看是不是沒有使用模版。

@RestController = @Controller + @ResponseBody

2.2統一處理異常

統一處理異常我在Struts2、springMVC的時候都已經接觸過了,方法都是類似的。定義一個自己系統的異常,為了更好地排查出錯誤所在。

而這個課程的統一處理異常我又學到了不少的東西:

  • 我們在Controller一般返回的是JSON資料給前端頁面,如果出現了異常,你單獨丟擲了異常,如果沒有做任何的處理,返回的JSON格式一定和成功的訪問的是不一樣的,那麼這就會造成前臺在解析的時候可能會有混亂。為了解決這種情況,我們可以單獨封裝一個類來進行返回,類的成員變數:code,message,data。有了這個類,那麼返回的JSON格式就是相同的了。
  • 前邊說到了返回類的code,這個code最好就不要單獨寫出來。可以使用一個列舉來進行維護。這樣的話就非常方便我們去操作了。
  • service丟擲自定義異常、controller也丟擲自定義異常。由Spring的異常處理器來進行捕獲、對其進行輸出、返回JSON給前臺頁面。

2.3AOP

SpringBoot環境下使用AOP,也是需要匯入maven座標的。知識點都和spring學習的差不多…

使用日誌記錄可以使用sl4jlog,這個是Spring自帶的。

在返回給瀏覽器前記錄返回的資料:

三、知新

3.1 SpringData JPA

SpringData JPA直接倒是聽過,但是沒了解過。課程說它就是一個標準,能夠方便我們對資料庫的CURD。

也去網上看了些資料,它的預設實現是Hibernate,因此,使用JPA,就相當於使用Hibernate了。

我認為它實際上就是封裝了Hibernate的API,另Hibernate的開發又更加簡單了。

建立一個介面,實現JPA所給出的介面,那麼我們自己建立的介面就有了JPA也就是Hibernate的API了。

課程中使用的是RESTful風格的API實現增刪改查:

3.2IDEA類似與POSTMAN

視訊作者使用的是POSTMAN軟體來進行對http請求的測試的,在評論留言說IDEA也有這樣的功能:

idea 有個 rest client 可以代替postman Tools -> Test RESTful web service

我也順利找到了..

既然是使用了RESTful的風格,那麼在Controller了就可以使用GetMapping、PutMapping、DeleteMapping這樣的註解了。

3.3單元測試

在service層做單元測試的和我之前學過的單元測試是一樣的,就是autowired一個service物件然後就測試方法就行了。

而測試Controller、在教程中也稱之為測試API,這就是我第一次接觸了。測試API其實就是模擬使用HTTP來進行測試。

使用到了MOCK這麼一個物件來幫我們進行測試:

還有要注意的是:如果使用mvn來進行打包的話,那麼打包的時候會自動幫我們進行單元測試的。因此,我們有的時候不想他打包的時候進行單元測試,就需要寫以下的引數了:

3.4熱部署和熱載入

在學習完上面SpringBoot以後,我覺得並不過癮、隨後又發現了一個課程:http://www.imooc.com/learn/915

在標題上寫著的是SpringBoot和熱部署。於是我又進去學習了。

好的,回到熱部署和熱載入。——

熱部署和熱載入這兩個名詞其實我剛開始是搞不清的,不過這兩個名詞我都是聽過的。因為我在Idea中使用了JRebel這個外掛了,瞭解了大概的。

熱部署代表的是:我們不需要重啟伺服器,能夠將新war包替換舊的war包

熱載入代表的是:我們不需要重啟伺服器,就能夠類檢測得到,重新生成類的位元組碼檔案

無論是熱部署或者是熱載入、都是基於Java類載入器來完成的。

3.4.1Java類載入過程

Java檔案被編譯成位元組碼檔案、classloader將位元組碼檔案放在JVM上執行。

驗證階段:位元組碼檔案不會對JVM造成危害

準備階段:是會賦初始值,並不是程式中的值。比如:int=0

解析階段:符號引用變成直接引用

初始化階段:初始化程式的值、有5個情況會導致執行初始化時機:new、reflect、先初始化父類再初始化子類、main方法、JDK1.7動態語言 ref_

final修飾的並不會觸發,因為他會放在常量池中。

在裡邊還有使用java程式碼的時候來實現熱載入的,我就沒有去敲了。用到再回過去吧。!

3.4.2Tomcat熱部署

tomcat 可以使用3種方式實現熱部署:

  1. 直接啟動tomcat後再把專案放進webapp
  2. 修改servlet.xml中,context標籤中加入屬性實現
  3. 通過自定義xml檔案,放在localhost檔案下面。我覺得就是第二點的延伸

3.4.3SpringBoot熱部署

springBoot熱部署3種方式:
1、在plugin標籤中加入外掛
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
        <version>1.2.6.RELEASE</version>
    </dependency>
</dependencies>

進入pom檔案的目錄輸入 mvn spring-boot:run啟動

2、啟動的加入引數 引用springloaded jar包
    -javaagent:`jar包路徑` -noverify


3、pom檔案加入依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

2018年1月2日15:02:13

最後根據下面這篇博文來使用SpringBoot熱部署:http://blog.csdn.net/u013938484/article/details/77541050

值得注意的是:在IDEA下不是自動編譯的,因此是需要按Ctrl+F9才能實現!

四、擴充套件閱讀

後來我使用了SpringBoot搭建了一個簡單的專案,從中也遇到了不少的問題和相關的沒有接觸到的知識點。下面我會給出當時搜尋到的資料和遇到的問題以及解決方案

4.1 SpringBoot教程參考資料:

4.2 SpringBoot遇到的問題以及解決資料

五、最後

SpringBoot能使我們簡化繁瑣的配置,簡化Maven包的依賴(缺點:同時加入一些我們不需要的包)。總體來看的是一個非常好用的框架(整合了很多有用的功能,與其他框架整合十分方便),學習成本很低(如果學過SpringMVC,分分鐘就上手),非常合適用來搭建環境。

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同學,可以關注微信公眾號:Java3y

相關文章