天天看點

SpringBoot就是這麼簡單

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

隻是大概了解過他是用起來很友善,不用什麼配置的。于是我就花了點時間去跟着學習了。

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

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

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

在idea中直接使用啟動(最常用)

使用mvn 指令來啟動

使用mvn編譯,而後在class目錄生成jar包,使用Java指令來啟動

使用SpringBoot作為我們的架構,連Tomcat都不用自己配置。Tomcat預設的端口是8080。那如果我們要改端口的話,怎麼改呢??項目中可能有一些屬性變量,那怎麼配置呢???

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

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

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

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

那麼在擷取的時候就不需要使用<code>@value</code>屬性來分别擷取了。直接擷取Java類的成員變量就行了。

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

<code>@configurationProperties</code>

<code>@Component</code>

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

可以将開發環境的配置檔案和生産環境的配置檔案分開,使用總配置檔案指定使用的是哪個配置檔案。

在使用java變量啟動Springboot項目的時候,可以指定使用哪個配置檔案。

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

<code>@RestController = @Controller + @ResponseBody</code>

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

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

我們在Controller一般傳回的是JSON資料給前端頁面,如果出現了異常,你單獨抛出了異常,如果沒有做任何的處理,傳回的JSON格式一定和成功的通路的是不一樣的,那麼這就會造成前台在解析的時候可能會有混亂。為了解決這種情況,我們可以單獨封裝一個類來進行傳回,類的成員變量:code,message,data。有了這個類,那麼傳回的JSON格式就是相同的了。

前邊說到了傳回類的code,這個code最好就不要單獨寫出來。可以使用一個枚舉來進行維護。這樣的話就非常友善我們去操作了。

service抛出自定義異常、controller也抛出自定義異常。由Spring的異常處理器來進行捕獲、對其進行輸出、傳回JSON給前台頁面。

SpringBoot環境下使用AOP,也是需要導入maven坐标的。知識點都和spring學習的差不多...

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

SpringBoot就是這麼簡單

在傳回給浏覽器前記錄傳回的資料:

SpringBoot就是這麼簡單

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

也去網上看了些資料,它的預設實作是Hibernate,是以,使用JPA,就相當于使用Hibernate了。

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

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

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

SpringBoot就是這麼簡單

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

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

我也順利找到了..

SpringBoot就是這麼簡單

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

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

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

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

SpringBoot就是這麼簡單

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

SpringBoot就是這麼簡單

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

在标題上寫着的是SpringBoot和熱部署。于是我又進去學習了。

好的,回到熱部署和熱加載。------

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

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

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

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

SpringBoot就是這麼簡單

Java檔案被編譯成位元組碼檔案、classloader将位元組碼檔案放在JVM上運作。

SpringBoot就是這麼簡單

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

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

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

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

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

SpringBoot就是這麼簡單
SpringBoot就是這麼簡單

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

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

直接啟動tomcat後再把項目放進webapp

修改servlet.xml中,context标簽中加入屬性實作

通過自定義xml檔案,放在localhost檔案下面。我覺得就是第二點的延伸

2018年1月2日15:02:13

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

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

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

http://blog.didispace.com/Spring-Boot%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/

http://www.cnblogs.com/magicalSam/p/7196340.html

springBoot整合mybatis,這次是沒有用到的,可能以後會用到:

http://www.cnblogs.com/elvinle/p/7999612.html

springBoot Github Demo:

https://github.com/t-hong/springboot-examples

與流行架構整合的Demo(慕課網,對應有課程的)

https://github.com/leechenxiang/imooc-springboot-starter

測試Controller使用MockMVC測試

http://www.cnblogs.com/xd03122049/p/6001457.html

http://blog.csdn.net/xiao_xuwen/article/details/52890730

http://www.cnblogs.com/xiaohunshi/p/5706943.html

springBoot攔截器

http://blog.csdn.net/catoop/article/details/50501696

SpringBoot攔截器無法注入Bean

https://my.oschina.net/u/1790105/blog/1490098

http://blog.csdn.net/mjlfto/article/details/65635135

出現: Could not find acceptable representation原因及解決方法

http://blog.csdn.net/neosmith/article/details/51557957

或者是因為傳回的JSON資料,而你傳回了一個頁面(使用RESTCONTROLLER沒有注意)

springBoot下使用統一異常處理方法:

http://www.cnblogs.com/magicalSam/p/7198420.html

springBoot內建Freemarker

http://ifeve.com/spring-boot-%E9%9B%86%E6%88%90-freemarker-%E8%AF%A6%E8%A7%A3%E6%A1%88%E4%BE%8B/

http://blog.csdn.net/z69183787/article/details/73850417

SpringBoot就是這麼簡單
SpringBoot就是這麼簡單
SpringBoot就是這麼簡單

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

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

更多的文章可往:文章的目錄導航