SpringBoot就是這么簡單

一、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屬性來進行獲取醉途。

image
image

如果我們的配置屬性是有規(guī)律的(是分類的)矾瑰,比如為System系統(tǒng)配置的屬性,我們可以創(chuàng)建一個Java類來進行管理隘擎。

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

image
image

當然了货葬,這里涉及到了兩個注解:

  • @configurationProperties
  • @Component

再舉個例子采幌,我們的生產(chǎn)環(huán)境和開發(fā)環(huán)境的配置變量很有可能是不一樣的,比如:我們的path變量在開發(fā)環(huán)境中是:http://localhost:8080震桶。而我們的生產(chǎn)環(huán)境中的path路徑是:zhognfucheng.site休傍。這就造成了差異,在springBoot中蹲姐,這種差異就很好解決了磨取。

image
  • 可以將開發(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自帶的怠堪。

image

在返回給瀏覽器前記錄返回的數(shù)據(jù):

image

三、知新

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)增刪改查:

image

3.2IDEA類似與POSTMAN

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

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

我也順利找到了..


image

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

3.3單元測試

在service層做單元測試的和我之前學(xué)過的單元測試是一樣的摧莽,就是autowired一個service對象然后就測試方法就行了庙洼。

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

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

image

還有要注意的是:如果使用mvn來進行打包的話丑蛤,那么打包的時候會自動幫我們進行單元測試的叠聋。因此,我們有的時候不想他打包的時候進行單元測試受裹,就需要寫以下的參數(shù)了:

image

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類加載過程

image

Java文件被編譯成字節(jié)碼文件、classloader將字節(jié)碼文件放在JVM上運行译仗。

image

驗證階段:字節(jié)碼文件不會對JVM造成危害

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

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

初始化階段:初始化程序的值纵菌、有5個情況會導(dǎo)致執(zhí)行初始化時機:new斥赋、reflect、先初始化父類再初始化子類产艾、main方法疤剑、JDK1.7動態(tài)語言 ref_

final修飾的并不會觸發(fā)滑绒,因為他會放在常量池中。

image
image

在里邊還有使用java代碼的時候來實現(xiàn)熱加載的隘膘,我就沒有去敲了疑故。用到再回過去吧。弯菊!

3.4.2Tomcat熱部署

tomcat 可以使用3種方式實現(xiàn)熱部署:

  1. 直接啟動tomcat后再把項目放進webapp

  2. 修改servlet.xml中,context標簽中加入屬性實現(xiàn)

  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管钳、啟動的加入?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教程參考資料:

五阅虫、最后

image
image
image

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

如果文章有錯的地方歡迎指正,大家互相交流米诉。習(xí)慣在微信看技術(shù)文章菱蔬,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號:Java3y

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末史侣,一起剝皮案震驚了整個濱河市拴泌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惊橱,老刑警劉巖蚪腐,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異税朴,居然都是意外死亡回季,警方通過查閱死者的電腦和手機家制,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泡一,“玉大人颤殴,你說我怎么就攤上這事”侵遥” “怎么了涵但?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帖蔓。 經(jīng)常有香客問我矮瘟,道長,這世上最難降的妖魔是什么塑娇? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任澈侠,我火速辦了婚禮,結(jié)果婚禮上钝吮,老公的妹妹穿的比我還像新娘埋涧。我一直安慰自己,他們只是感情好奇瘦,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布棘催。 她就那樣靜靜地躺著,像睡著了一般耳标。 火紅的嫁衣襯著肌膚如雪醇坝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天次坡,我揣著相機與錄音呼猪,去河邊找鬼。 笑死砸琅,一個胖子當著我的面吹牛宋距,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播症脂,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼谚赎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诱篷?” 一聲冷哼從身側(cè)響起壶唤,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棕所,沒想到半個月后闸盔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡琳省,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年迎吵,在試婚紗的時候發(fā)現(xiàn)自己被綠了躲撰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钓觉,死狀恐怖茴肥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荡灾,我是刑警寧澤瓤狐,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站批幌,受9級特大地震影響础锐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荧缘,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一皆警、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧截粗,春花似錦信姓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至珊蟀,卻和暖如春菊值,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背育灸。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工腻窒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磅崭。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓儿子,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砸喻。 傳聞我的和親對象是個殘疾皇子柔逼,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)恩够,斷路器卒落,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 在我搭建基于Spring Cloud的微服務(wù)體系應(yīng)用的時候所需要或者是常用的屬性配置文件羡铲,還有這些屬性的用途蜂桶,此配...
    StrongManAlone閱讀 4,020評論 0 18
  • 冬至。剛好昨天回家也切,算是碰巧趕上了扑媚。好像自從上大學(xué)開始腰湾,已經(jīng)有很多年沒在家里過過冬至了。以至于疆股,腦子里都不會有這樣...
    薰微之戀閱讀 389評論 4 1
  • 記得前一段時間,和朋友聊天两残,無意中說起來對未來迷茫這個話題永毅,現(xiàn)在大三,對未來迷茫仿佛是生活的常態(tài)人弓。 而朋友的意見卻...
    賈香閱讀 313評論 0 1