一、SpringBoot入門
今天在慕課網(wǎng)中看見了Spring Boot這么一個教程隶校,這個Spring Boot作為JavaWeb的學(xué)習(xí)者肯定至少會聽過漏益,但我是不知道他是什么玩意。
只是大概了解過他是用起來很方便深胳,不用什么配置的绰疤。于是我就花了點時間去跟著學(xué)習(xí)了。
視頻地址: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
屬性來進行獲取醉途。
如果我們的配置屬性是有規(guī)律的(是分類的)矾瑰,比如為System系統(tǒng)配置的屬性,我們可以創(chuàng)建一個Java類來進行管理隘擎。
那么在獲取的時候就不需要使用@value
屬性來分別獲取了殴穴。直接獲取Java類的成員變量就行了。
當然了货葬,這里涉及到了兩個注解:
@configurationProperties
@Component
再舉個例子采幌,我們的生產(chǎn)環(huán)境和開發(fā)環(huán)境的配置變量很有可能是不一樣的,比如:我們的path變量在開發(fā)環(huán)境中是:http://localhost:8080
震桶。而我們的生產(chǎn)環(huán)境中的path路徑是:zhognfucheng.site
休傍。這就造成了差異,在springBoot中蹲姐,這種差異就很好解決了磨取。
- 可以將開發(fā)環(huán)境的配置文件和生產(chǎn)環(huán)境的配置文件分開,使用總配置文件指定使用的是哪個配置文件柴墩。
- 在使用java變量啟動Springboot項目的時候忙厌,可以指定使用哪個配置文件。
二江咳、回顧
2.1Controller的使用
SpringBoot已經(jīng)不推薦使用JSP了慰毅,推薦使用模版來返回頁面。thymeleaf這個模版扎阶,如果在返回頁面的時候出錯了汹胃,看看是不是沒有使用模版。
@RestController = @Controller + @ResponseBody
2.2統(tǒng)一處理異常
統(tǒng)一處理異常我在Struts2东臀、springMVC的時候都已經(jīng)接觸過了着饥,方法都是類似的。定義一個自己系統(tǒng)的異常惰赋,為了更好地排查出錯誤所在宰掉。
而這個課程的統(tǒng)一處理異常我又學(xué)到了不少的東西:
- 我們在Controller一般返回的是JSON數(shù)據(jù)給前端頁面呵哨,如果出現(xiàn)了異常,你單獨拋出了異常轨奄,如果沒有做任何的處理孟害,返回的JSON格式一定和成功的訪問的是不一樣的,那么這就會造成前臺在解析的時候可能會有混亂挪拟。為了解決這種情況挨务,我們可以單獨封裝一個類來進行返回,類的成員變量:code,message,data玉组。有了這個類谎柄,那么返回的JSON格式就是相同的了。
- 前邊說到了返回類的code惯雳,這個code最好就不要單獨寫出來朝巫。可以使用一個枚舉來進行維護石景。這樣的話就非常方便我們?nèi)ゲ僮髁恕?/li>
- service拋出自定義異常劈猿、controller也拋出自定義異常。由Spring的異常處理器來進行捕獲潮孽、對其進行輸出糙臼、返回JSON給前臺頁面。
2.3AOP
SpringBoot環(huán)境下使用AOP恩商,也是需要導(dǎo)入maven坐標的。知識點都和spring學(xué)習(xí)的差不多...
使用日志記錄可以使用sl4jlog必逆,這個是Spring自帶的怠堪。
在返回給瀏覽器前記錄返回的數(shù)據(jù):
三、知新
3.1 SpringData JPA
SpringData JPA直接倒是聽過名眉,但是沒了解過粟矿。課程說它就是一個標準,能夠方便我們對數(shù)據(jù)庫的CURD损拢。
也去網(wǎng)上看了些資料陌粹,它的默認實現(xiàn)是Hibernate,因此福压,使用JPA掏秩,就相當于使用Hibernate了。
我認為它實際上就是封裝了Hibernate的API荆姆,另Hibernate的開發(fā)又更加簡單了蒙幻。
創(chuàng)建一個接口,實現(xiàn)JPA所給出的接口胆筒,那么我們自己創(chuàng)建的接口就有了JPA也就是Hibernate的API了邮破。
課程中使用的是RESTful風格的API實現(xiàn)增刪改查:
3.2IDEA類似與POSTMAN
視頻作者使用的是POSTMAN軟件來進行對http請求的測試的,在評論留言說IDEA也有這樣的功能:
idea 有個 rest client 可以代替postman Tools -> Test RESTful web service
我也順利找到了..
既然是使用了RESTful的風格,那么在Controller了就可以使用GetMapping抒和、PutMapping矫渔、DeleteMapping這樣的注解了。
3.3單元測試
在service層做單元測試的和我之前學(xué)過的單元測試是一樣的摧莽,就是autowired一個service對象然后就測試方法就行了庙洼。
而測試Controller、在教程中也稱之為測試API范嘱,這就是我第一次接觸了送膳。測試API其實就是模擬使用HTTP來進行測試。
使用到了MOCK這么一個對象來幫我們進行測試:
還有要注意的是:如果使用mvn來進行打包的話丑蛤,那么打包的時候會自動幫我們進行單元測試的叠聋。因此,我們有的時候不想他打包的時候進行單元測試受裹,就需要寫以下的參數(shù)了:
3.4熱部署和熱加載
在學(xué)習(xí)完上面SpringBoot以后碌补,我覺得并不過癮、隨后又發(fā)現(xiàn)了一個課程:http://www.imooc.com/learn/915
在標題上寫著的是SpringBoot和熱部署棉饶。于是我又進去學(xué)習(xí)了厦章。
好的,回到熱部署和熱加載照藻。------
熱部署和熱加載這兩個名詞其實我剛開始是搞不清的袜啃,不過這兩個名詞我都是聽過的。因為我在Idea中使用了JRebel這個插件了幸缕,了解了大概的群发。
熱部署代表的是:我們不需要重啟服務(wù)器,能夠?qū)⑿聎ar包替換舊的war包发乔。
熱加載代表的是:我們不需要重啟服務(wù)器熟妓,就能夠類檢測得到,重新生成類的字節(jié)碼文件
無論是熱部署或者是熱加載栏尚、都是基于Java類加載器來完成的起愈。
3.4.1Java類加載過程
Java文件被編譯成字節(jié)碼文件、classloader將字節(jié)碼文件放在JVM上運行译仗。
驗證階段:字節(jié)碼文件不會對JVM造成危害
準備階段:是會賦初始值抬虽,并不是程序中的值。比如:int=0
解析階段:符號引用變成直接引用
初始化階段:初始化程序的值纵菌、有5個情況會導(dǎo)致執(zhí)行初始化時機:new斥赋、reflect、先初始化父類再初始化子類产艾、main方法疤剑、JDK1.7動態(tài)語言 ref_
final修飾的并不會觸發(fā)滑绒,因為他會放在常量池中。
在里邊還有使用java代碼的時候來實現(xiàn)熱加載的隘膘,我就沒有去敲了疑故。用到再回過去吧。弯菊!
3.4.2Tomcat熱部署
tomcat 可以使用3種方式實現(xiàn)熱部署:
直接啟動tomcat后再把項目放進webapp
修改servlet.xml中,context標簽中加入屬性實現(xiàn)
通過自定義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管钳、啟動的加入?yún)?shù) 引用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
最后根據(jù)下面這篇博文來使用SpringBoot熱部署:http://blog.csdn.net/u013938484/article/details/77541050
值得注意的是:在IDEA下不是自動編譯的,因此是需要按Ctrl+F9才能實現(xiàn)!
四才漆、擴展閱讀
后來我使用了SpringBoot搭建了一個簡單的項目牛曹,從中也遇到了不少的問題和相關(guān)的沒有接觸到的知識點。下面我會給出當時搜索到的資料和遇到的問題以及解決方案
4.1 SpringBoot教程參考資料:
http://blog.didispace.com/Spring-Boot%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/
-
springBoot整合mybatis醇滥,這次是沒有用到的黎比,可能以后會用到:
-
springBoot Github Demo:
-
與流行框架整合的Demo(慕課網(wǎng),對應(yīng)有課程的)
-
https://github.com/leechenxiang/imooc-springboot-starter
4.2 SpringBoot遇到的問題以及解決資料
-
-
測試Controller使用MockMVC測試
-
springBoot攔截器
-
SpringBoot攔截器無法注入Bean
-
出現(xiàn): Could not find acceptable representation原因及解決方法
- http://blog.csdn.net/neosmith/article/details/51557957
- 或者是因為返回的JSON數(shù)據(jù)鸳玩,而你返回了一個頁面(使用RESTCONTROLLER沒有注意)
-
springBoot下使用統(tǒng)一異常處理方法:
-
springBoot集成Freemarker
五阅虫、最后
SpringBoot能使我們簡化繁瑣的配置,簡化Maven包的依賴(缺點:同時加入一些我們不需要的包)不跟⊥堑郏總體來看的是一個非常好用的框架(集成了很多有用的功能,與其他框架整合十分方便)窝革,學(xué)習(xí)成本很低(如果學(xué)過SpringMVC购城,分分鐘就上手),非常合適用來搭建環(huán)境聊闯。
如果文章有錯的地方歡迎指正,大家互相交流米诉。習(xí)慣在微信看技術(shù)文章菱蔬,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號:Java3y