SpringBoot就是這麼簡單

1、SpringBoot入門

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

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

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

教程中的代碼:https://gitee.com/liaoshixiong/girlgit

1.1SpringBoot啓動

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

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

1.2項目屬性配置

使用SpringBoot做爲咱們的框架,連Tomcat都不用本身配置。Tomcat默認的端口是8080。那若是咱們要改端口的話,怎麼改呢??項目中可能有一些屬性變量,那怎麼配置呢???web

SpringBoot是提供了application.properties這種配置文件供咱們使用的。spring

可是,咱們能夠有更好的配置方式,使用yml文件,這種配置文件使用起來就更加簡潔了。數據庫

在yml文件中配置屬性,那麼咱們在Controller中可使用@value屬性來進行獲取。瀏覽器

若是咱們的配置屬性是有規律的(是分類的),好比爲System系統配置的屬性,咱們能夠建立一個Java類來進行管理。tomcat

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

固然了,這裏涉及到了兩個註解:

  • @configurationProperties
  • @Component

再舉個例子,咱們的生產環境和開發環境的配置變量頗有多是不同的,好比:咱們的path變量在開發環境中是:http://localhost:8080。而咱們的生產環境中的path路徑是:zhognfucheng.site。這就形成了差別,在springBoot中,這種差別就很好解決了。

  • 能夠將開發環境的配置文件和生產環境的配置文件分開,使用總配置文件指定使用的是哪一個配置文件。
  • 在使用java變量啓動Springboot項目的時候,能夠指定使用哪一個配置文件。

2、回顧

2.1Controller的使用

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

@RestController = @Controller + @ResponseBody

2.2統一處理異常

統一處理異常我在Struts二、springMVC的時候都已經接觸過了,方法都是相似的。定義一個本身系統的異常,爲了更好地排查出錯誤所在。

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

  • 咱們在Controller通常返回的是JSON數據給前端頁面,若是出現了異常,你單獨拋出了異常,若是沒有作任何的處理,返回的JSON格式必定和成功的訪問的是不同的,那麼這就會形成前臺在解析的時候可能會有混亂。爲了解決這種狀況,咱們能夠單獨封裝一個類來進行返回,類的成員變量:code,message,data。有了這個類,那麼返回的JSON格式就是相同的了。
  • 前邊說到了返回類的code,這個code最好就不要單獨寫出來。可使用一個枚舉來進行維護。這樣的話就很是方便咱們去操做了。
  • service拋出自定義異常、controller也拋出自定義異常。由Spring的異常處理器來進行捕獲、對其進行輸出、返回JSON給前臺頁面。

2.3AOP

SpringBoot環境下使用AOP,也是須要導入maven座標的。知識點都和spring學習的差很少...

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

在返回給瀏覽器前記錄返回的數據:

3、知新

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種方式:
一、在plugin標籤中加入插件
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
        <version>1.2.6.RELEASE</version>
    </dependency>
</dependencies>

進入pom文件的目錄輸入 mvn spring-boot:run啓動

二、啓動的加入參數 引用springloaded jar包
    -javaagent:'jar包路徑' -noverify


三、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才能實現!

4、擴展閱讀

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

4.1 SpringBoot教程參考資料:

5、最後

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

若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:Java3y

相關文章
相關標籤/搜索