摘要:熱加載代表的是我們不需要重啟服務(wù)器,就能夠類(lèi)檢測(cè)得到,重新生成類(lèi)的字節(jié)碼文件無(wú)論是熱部署或者是熱加載都是基于類(lèi)加載器來(lái)完成的。驗(yàn)證階段字節(jié)碼文件不會(huì)對(duì)造成危害準(zhǔn)備階段是會(huì)賦初始值,并不是程序中的值。
一、SpringBoot入門(mén)
今天在慕課網(wǎng)中看見(jiàn)了Spring Boot這么一個(gè)教程,這個(gè)Spring Boot作為JavaWeb的學(xué)習(xí)者肯定至少會(huì)聽(tīng)過(guò),但我是不知道他是什么玩意。
只是大概了解過(guò)他是用起來(lái)很方便,不用什么配置的。于是我就花了點(diǎn)時(shí)間去跟著學(xué)習(xí)了。
視頻地址:http://www.imooc.com/learn/767
教程中的代碼:https://gitee.com/liaoshixiong/girl
1.1SpringBoot啟動(dòng)在教程中,啟動(dòng)SpirngBoot有三種方式:
在idea中直接使用啟動(dòng)(最常用)
使用mvn 命令來(lái)啟動(dòng)
使用mvn編譯,而后在class目錄生成jar包,使用Java命令來(lái)啟動(dòng)
1.2項(xiàng)目屬性配置使用SpringBoot作為我們的框架,連Tomcat都不用自己配置。Tomcat默認(rèn)的端口是8080。那如果我們要改端口的話,怎么改呢??項(xiàng)目中可能有一些屬性變量,那怎么配置呢???
SpringBoot是提供了application.properties這種配置文件供我們使用的。
但是,我們可以有更好的配置方式,使用yml文件,這種配置文件使用起來(lái)就更加簡(jiǎn)潔了。
在yml文件中配置屬性,那么我們?cè)贑ontroller中可以使用@value屬性來(lái)進(jìn)行獲取。
如果我們的配置屬性是有規(guī)律的(是分類(lèi)的),比如為System系統(tǒng)配置的屬性,我們可以創(chuàng)建一個(gè)Java類(lèi)來(lái)進(jìn)行管理。
那么在獲取的時(shí)候就不需要使用@value屬性來(lái)分別獲取了。直接獲取Java類(lèi)的成員變量就行了。
當(dāng)然了,這里涉及到了兩個(gè)注解:
@configurationProperties
@Component
再舉個(gè)例子,我們的生產(chǎn)環(huán)境和開(kāi)發(fā)環(huán)境的配置變量很有可能是不一樣的,比如:我們的path變量在開(kāi)發(fā)環(huán)境中是:http://localhost:8080。而我們的生產(chǎn)環(huán)境中的path路徑是:zhognfucheng.site。這就造成了差異,在springBoot中,這種差異就很好解決了。
可以將開(kāi)發(fā)環(huán)境的配置文件和生產(chǎn)環(huán)境的配置文件分開(kāi),使用總配置文件指定使用的是哪個(gè)配置文件。
在使用java變量啟動(dòng)Springboot項(xiàng)目的時(shí)候,可以指定使用哪個(gè)配置文件。
二、回顧 2.1Controller的使用SpringBoot已經(jīng)不推薦使用JSP了,推薦使用模版來(lái)返回頁(yè)面。thymeleaf這個(gè)模版,如果在返回頁(yè)面的時(shí)候出錯(cuò)了,看看是不是沒(méi)有使用模版。
@RestController = @Controller + @ResponseBody
2.2統(tǒng)一處理異常統(tǒng)一處理異常我在Struts2、springMVC的時(shí)候都已經(jīng)接觸過(guò)了,方法都是類(lèi)似的。定義一個(gè)自己系統(tǒng)的異常,為了更好地排查出錯(cuò)誤所在。
而這個(gè)課程的統(tǒng)一處理異常我又學(xué)到了不少的東西:
我們?cè)贑ontroller一般返回的是JSON數(shù)據(jù)給前端頁(yè)面,如果出現(xiàn)了異常,你多帶帶拋出了異常,如果沒(méi)有做任何的處理,返回的JSON格式一定和成功的訪問(wèn)的是不一樣的,那么這就會(huì)造成前臺(tái)在解析的時(shí)候可能會(huì)有混亂。為了解決這種情況,我們可以多帶帶封裝一個(gè)類(lèi)來(lái)進(jìn)行返回,類(lèi)的成員變量:code,message,data。有了這個(gè)類(lèi),那么返回的JSON格式就是相同的了。
前邊說(shuō)到了返回類(lèi)的code,這個(gè)code最好就不要多帶帶寫(xiě)出來(lái)??梢允褂靡粋€(gè)枚舉來(lái)進(jìn)行維護(hù)。這樣的話就非常方便我們?nèi)ゲ僮髁恕?/p>
service拋出自定義異常、controller也拋出自定義異常。由Spring的異常處理器來(lái)進(jìn)行捕獲、對(duì)其進(jìn)行輸出、返回JSON給前臺(tái)頁(yè)面。
2.3AOPSpringBoot環(huán)境下使用AOP,也是需要導(dǎo)入maven坐標(biāo)的。知識(shí)點(diǎn)都和spring學(xué)習(xí)的差不多...
使用日志記錄可以使用sl4jlog,這個(gè)是Spring自帶的。
在返回給瀏覽器前記錄返回的數(shù)據(jù):
三、知新 3.1 SpringData JPASpringData JPA直接倒是聽(tīng)過(guò),但是沒(méi)了解過(guò)。課程說(shuō)它就是一個(gè)標(biāo)準(zhǔn),能夠方便我們對(duì)數(shù)據(jù)庫(kù)的CURD。
也去網(wǎng)上看了些資料,它的默認(rèn)實(shí)現(xiàn)是Hibernate,因此,使用JPA,就相當(dāng)于使用Hibernate了。
我認(rèn)為它實(shí)際上就是封裝了Hibernate的API,另Hibernate的開(kāi)發(fā)又更加簡(jiǎn)單了。
創(chuàng)建一個(gè)接口,實(shí)現(xiàn)JPA所給出的接口,那么我們自己創(chuàng)建的接口就有了JPA也就是Hibernate的API了。
課程中使用的是RESTful風(fēng)格的API實(shí)現(xiàn)增刪改查:
3.2IDEA類(lèi)似與POSTMAN視頻作者使用的是POSTMAN軟件來(lái)進(jìn)行對(duì)http請(qǐng)求的測(cè)試的,在評(píng)論留言說(shuō)IDEA也有這樣的功能:
idea 有個(gè) rest client 可以代替postman Tools -> Test RESTful web service
我也順利找到了..
既然是使用了RESTful的風(fēng)格,那么在Controller了就可以使用GetMapping、PutMapping、DeleteMapping這樣的注解了。
3.3單元測(cè)試在service層做單元測(cè)試的和我之前學(xué)過(guò)的單元測(cè)試是一樣的,就是autowired一個(gè)service對(duì)象然后就測(cè)試方法就行了。
而測(cè)試Controller、在教程中也稱之為測(cè)試API,這就是我第一次接觸了。測(cè)試API其實(shí)就是模擬使用HTTP來(lái)進(jìn)行測(cè)試。
使用到了MOCK這么一個(gè)對(duì)象來(lái)幫我們進(jìn)行測(cè)試:
還有要注意的是:如果使用mvn來(lái)進(jìn)行打包的話,那么打包的時(shí)候會(huì)自動(dòng)幫我們進(jìn)行單元測(cè)試的。因此,我們有的時(shí)候不想他打包的時(shí)候進(jìn)行單元測(cè)試,就需要寫(xiě)以下的參數(shù)了:
3.4熱部署和熱加載在學(xué)習(xí)完上面SpringBoot以后,我覺(jué)得并不過(guò)癮、隨后又發(fā)現(xiàn)了一個(gè)課程:http://www.imooc.com/learn/915
在標(biāo)題上寫(xiě)著的是SpringBoot和熱部署。于是我又進(jìn)去學(xué)習(xí)了。
好的,回到熱部署和熱加載。------
熱部署和熱加載這兩個(gè)名詞其實(shí)我剛開(kāi)始是搞不清的,不過(guò)這兩個(gè)名詞我都是聽(tīng)過(guò)的。因?yàn)槲以贗dea中使用了JRebel這個(gè)插件了,了解了大概的。
熱部署代表的是:我們不需要重啟服務(wù)器,能夠?qū)⑿聎ar包替換舊的war包。
熱加載代表的是:我們不需要重啟服務(wù)器,就能夠類(lèi)檢測(cè)得到,重新生成類(lèi)的字節(jié)碼文件
無(wú)論是熱部署或者是熱加載、都是基于Java類(lèi)加載器來(lái)完成的。
3.4.1Java類(lèi)加載過(guò)程Java文件被編譯成字節(jié)碼文件、classloader將字節(jié)碼文件放在JVM上運(yùn)行。
驗(yàn)證階段:字節(jié)碼文件不會(huì)對(duì)JVM造成危害
準(zhǔn)備階段:是會(huì)賦初始值,并不是程序中的值。比如:int=0
解析階段:符號(hào)引用變成直接引用
初始化階段:初始化程序的值、有5個(gè)情況會(huì)導(dǎo)致執(zhí)行初始化時(shí)機(jī):new、reflect、先初始化父類(lèi)再初始化子類(lèi)、main方法、JDK1.7動(dòng)態(tài)語(yǔ)言 ref_
final修飾的并不會(huì)觸發(fā),因?yàn)樗麜?huì)放在常量池中。
在里邊還有使用java代碼的時(shí)候來(lái)實(shí)現(xiàn)熱加載的,我就沒(méi)有去敲了。用到再回過(guò)去吧。!
3.4.2Tomcat熱部署tomcat 可以使用3種方式實(shí)現(xiàn)熱部署:
直接啟動(dòng)tomcat后再把項(xiàng)目放進(jìn)webapp
修改servlet.xml中,context標(biāo)簽中加入屬性實(shí)現(xiàn)
通過(guò)自定義xml文件,放在localhost文件下面。我覺(jué)得就是第二點(diǎn)的延伸
3.4.3SpringBoot熱部署springBoot熱部署3種方式: 1、在plugin標(biāo)簽中加入插件進(jìn)入pom文件的目錄輸入 mvn spring-boot:run啟動(dòng) 2、啟動(dòng)的加入?yún)?shù) 引用springloaded jar包 -javaagent:"jar包路徑" -noverify 3、pom文件加入依賴 org.springframework springloaded 1.2.6.RELEASE org.springframework.boot spring-boot-devtools true
2018年1月2日15:02:13
最后根據(jù)下面這篇博文來(lái)使用SpringBoot熱部署:http://blog.csdn.net/u013938484/article/details/77541050
值得注意的是:在IDEA下不是自動(dòng)編譯的,因此是需要按Ctrl+F9才能實(shí)現(xiàn)!
四、擴(kuò)展閱讀后來(lái)我使用了SpringBoot搭建了一個(gè)簡(jiǎn)單的項(xiàng)目,從中也遇到了不少的問(wèn)題和相關(guān)的沒(méi)有接觸到的知識(shí)點(diǎn)。下面我會(huì)給出當(dāng)時(shí)搜索到的資料和遇到的問(wèn)題以及解決方案
4.1 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,這次是沒(méi)有用到的,可能以后會(huì)用到:
http://www.cnblogs.com/elvinle/p/7999612.html
springBoot Github Demo:
https://github.com/t-hong/springboot-examples
與流行框架整合的Demo(慕課網(wǎng),對(duì)應(yīng)有課程的)
https://github.com/leechenxiang/imooc-springboot-starter
4.2 SpringBoot遇到的問(wèn)題以及解決資料
測(cè)試Controller使用MockMVC測(cè)試
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攔截器無(wú)法注入Bean
https://my.oschina.net/u/1790105/blog/1490098
http://blog.csdn.net/mjlfto/article/details/65635135
出現(xiàn): Could not find acceptable representation原因及解決方法
http://blog.csdn.net/neosmith/article/details/51557957
或者是因?yàn)榉祷氐腏SON數(shù)據(jù),而你返回了一個(gè)頁(yè)面(使用RESTCONTROLLER沒(méi)有注意)
springBoot下使用統(tǒng)一異常處理方法:
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能使我們簡(jiǎn)化繁瑣的配置,簡(jiǎn)化Maven包的依賴(缺點(diǎn):同時(shí)加入一些我們不需要的包)??傮w來(lái)看的是一個(gè)非常好用的框架(集成了很多有用的功能,與其他框架整合十分方便),學(xué)習(xí)成本很低(如果學(xué)過(guò)SpringMVC,分分鐘就上手),非常合適用來(lái)搭建環(huán)境。
如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號(hào):Java3y
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68868.html
摘要:開(kāi)啟自動(dòng)配置功能后文詳解這個(gè)注解,學(xué)過(guò)的同學(xué)應(yīng)該對(duì)它不會(huì)陌生,就是掃描注解,默認(rèn)是掃描當(dāng)前類(lèi)下的。簡(jiǎn)單來(lái)說(shuō),這個(gè)注解可以幫助我們自動(dòng)載入應(yīng)用程序所需要的所有默認(rèn)配置。簡(jiǎn)單理解這二者掃描的對(duì)象是不一樣的。 前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y 回顧前面Spring的文章(以學(xué)習(xí)...
摘要:它使用約定大于配置的理念讓你的項(xiàng)目快速運(yùn)行起來(lái)。如何使用構(gòu)建工程第一步,當(dāng)然是安裝傻瓜式教程,請(qǐng)自行百度。包名,填完和后自動(dòng)生成,默認(rèn)即可。確認(rèn)無(wú)誤,點(diǎn)完成創(chuàng)建即可。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人如有問(wèn)題或建議,請(qǐng)后臺(tái)留言,我會(huì)盡力解決你的問(wèn)題。 前言 新年立了個(gè) flag,好好運(yùn)營(yíng)這個(gè)公眾號(hào)。具體來(lái)說(shuō),就是每周要寫(xiě)兩篇文章在這個(gè)號(hào)發(fā)表。剛立的 flag 可不能這么快打臉。下面送上本周第...
摘要:?jiǎn)?dòng)原理和執(zhí)行原理分析一的啟動(dòng)原理我們打開(kāi),注意看下面兩個(gè)依賴我們第一步是繼承了父項(xiàng)目,然后在添加啟動(dòng)器的依賴,項(xiàng)目就會(huì)自動(dòng)給我們導(dǎo)入關(guān)于項(xiàng)目所需要的配置和。 上一篇我們看到,我們很輕松的完成了項(xiàng)目的構(gòu)建,那么SpringBoot是如何做到的呢,在使用的使用又有哪些通用配置和注意事項(xiàng)呢? 其實(shí)SpringBoot給我們做了大量的自動(dòng)配置功能,我們只需要引入對(duì)應(yīng)的啟動(dòng)器就可以直接使用,作...
摘要:為了貼合主題,本次主要針對(duì)全局異常處理進(jìn)行舉例說(shuō)明。自定義異常處理自定義一個(gè)異常自定義異常程序員小明錯(cuò)誤碼錯(cuò)誤信息顯而易見(jiàn),這個(gè)異常繼承了,屬于運(yùn)行時(shí)異常。包括處理其他異常,都是這種方式。 之前用springboot的時(shí)候,只知道捕獲異常使用try{}catch,一個(gè)接口一個(gè)try{}catch,這也是大多數(shù)開(kāi)發(fā)人員異常處理的常用方式,雖然屢試不爽,但會(huì)造成一個(gè)問(wèn)題,就是一個(gè)Contr...
摘要:一從零搭建環(huán)境本次我使用的是編輯器來(lái)搭建和環(huán)境首先,我們?cè)谛陆?xiàng)目的時(shí)候,選擇,然后就行了??梢钥闯?,本次的版本為。這是一個(gè)非常好用的插件,有了它我們可以不用寫(xiě)繁瑣的方法。非常適合我們做一些簡(jiǎn)答的測(cè)試和小功能。 前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家對(duì)SpringB...
閱讀 3838·2021-11-12 10:34
閱讀 2840·2021-09-22 15:14
閱讀 810·2019-08-30 15:53
閱讀 3223·2019-08-30 12:53
閱讀 1310·2019-08-29 18:32
閱讀 2793·2019-08-29 16:41
閱讀 1092·2019-08-26 13:40
閱讀 1838·2019-08-23 18:07