摘要:熱加載代表的是我們不需要重啟服務器,就能夠類檢測得到,重新生成類的字節碼文件無論是熱部署或者是熱加載都是基于類加載器來完成的。驗證階段字節碼文件不會對造成危害準備階段是會賦初始值,并不是程序中的值。
一、SpringBoot入門
今天在慕課網中看見了Spring Boot這么一個教程,這個Spring Boot作為JavaWeb的學習者肯定至少會聽過,但我是不知道他是什么玩意。
只是大概了解過他是用起來很方便,不用什么配置的。于是我就花了點時間去跟著學習了。
視頻地址: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屬性來進行獲取。
如果我們的配置屬性是有規律的(是分類的),比如為System系統配置的屬性,我們可以創建一個Java類來進行管理。
那么在獲取的時候就不需要使用@value屬性來分別獲取了。直接獲取Java類的成員變量就行了。
當然了,這里涉及到了兩個注解:
@configurationProperties
@Component
再舉個例子,我們的生產環境和開發環境的配置變量很有可能是不一樣的,比如:我們的path變量在開發環境中是:http://localhost:8080。而我們的生產環境中的path路徑是:zhognfucheng.site。這就造成了差異,在springBoot中,這種差異就很好解決了。
可以將開發環境的配置文件和生產環境的配置文件分開,使用總配置文件指定使用的是哪個配置文件。
在使用java變量啟動Springboot項目的時候,可以指定使用哪個配置文件。
二、回顧 2.1Controller的使用SpringBoot已經不推薦使用JSP了,推薦使用模版來返回頁面。thymeleaf這個模版,如果在返回頁面的時候出錯了,看看是不是沒有使用模版。
@RestController = @Controller + @ResponseBody
2.2統一處理異常統一處理異常我在Struts2、springMVC的時候都已經接觸過了,方法都是類似的。定義一個自己系統的異常,為了更好地排查出錯誤所在。
而這個課程的統一處理異常我又學到了不少的東西:
我們在Controller一般返回的是JSON數據給前端頁面,如果出現了異常,你多帶帶拋出了異常,如果沒有做任何的處理,返回的JSON格式一定和成功的訪問的是不一樣的,那么這就會造成前臺在解析的時候可能會有混亂。為了解決這種情況,我們可以多帶帶封裝一個類來進行返回,類的成員變量:code,message,data。有了這個類,那么返回的JSON格式就是相同的了。
前邊說到了返回類的code,這個code最好就不要多帶帶寫出來。可以使用一個枚舉來進行維護。這樣的話就非常方便我們去操作了。
service拋出自定義異常、controller也拋出自定義異常。由Spring的異常處理器來進行捕獲、對其進行輸出、返回JSON給前臺頁面。
2.3AOPSpringBoot環境下使用AOP,也是需要導入maven坐標的。知識點都和spring學習的差不多...
使用日志記錄可以使用sl4jlog,這個是Spring自帶的。
在返回給瀏覽器前記錄返回的數據:
三、知新 3.1 SpringData JPASpringData 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種方式實現熱部署:
直接啟動tomcat后再把項目放進webapp
修改servlet.xml中,context標簽中加入屬性實現
通過自定義xml文件,放在localhost文件下面。我覺得就是第二點的延伸
3.4.3SpringBoot熱部署springBoot熱部署3種方式: 1、在plugin標簽中加入插件進入pom文件的目錄輸入 mvn spring-boot:run啟動 2、啟動的加入參數 引用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
最后根據下面這篇博文來使用SpringBoot熱部署:http://blog.csdn.net/u013938484/article/details/77541050
值得注意的是:在IDEA下不是自動編譯的,因此是需要按Ctrl+F9才能實現!
四、擴展閱讀后來我使用了SpringBoot搭建了一個簡單的項目,從中也遇到了不少的問題和相關的沒有接觸到的知識點。下面我會給出當時搜索到的資料和遇到的問題以及解決方案
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,這次是沒有用到的,可能以后會用到:
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
4.2 SpringBoot遇到的問題以及解決資料
測試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能使我們簡化繁瑣的配置,簡化Maven包的依賴(缺點:同時加入一些我們不需要的包)。總體來看的是一個非常好用的框架(集成了很多有用的功能,與其他框架整合十分方便),學習成本很低(如果學過SpringMVC,分分鐘就上手),非常合適用來搭建環境。
如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同學,可以關注微信公眾號:Java3y
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68868.html
摘要:開啟自動配置功能后文詳解這個注解,學過的同學應該對它不會陌生,就是掃描注解,默認是掃描當前類下的。簡單來說,這個注解可以幫助我們自動載入應用程序所需要的所有默認配置。簡單理解這二者掃描的對象是不一樣的。 前言 只有光頭才能變強。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 回顧前面Spring的文章(以學習...
摘要:它使用約定大于配置的理念讓你的項目快速運行起來。如何使用構建工程第一步,當然是安裝傻瓜式教程,請自行百度。包名,填完和后自動生成,默認即可。確認無誤,點完成創建即可。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 新年立了個 flag,好好運營這個公眾號。具體來說,就是每周要寫兩篇文章在這個號發表。剛立的 flag 可不能這么快打臉。下面送上本周第...
摘要:啟動原理和執行原理分析一的啟動原理我們打開,注意看下面兩個依賴我們第一步是繼承了父項目,然后在添加啟動器的依賴,項目就會自動給我們導入關于項目所需要的配置和。 上一篇我們看到,我們很輕松的完成了項目的構建,那么SpringBoot是如何做到的呢,在使用的使用又有哪些通用配置和注意事項呢? 其實SpringBoot給我們做了大量的自動配置功能,我們只需要引入對應的啟動器就可以直接使用,作...
摘要:為了貼合主題,本次主要針對全局異常處理進行舉例說明。自定義異常處理自定義一個異常自定義異常程序員小明錯誤碼錯誤信息顯而易見,這個異常繼承了,屬于運行時異常。包括處理其他異常,都是這種方式。 之前用springboot的時候,只知道捕獲異常使用try{}catch,一個接口一個try{}catch,這也是大多數開發人員異常處理的常用方式,雖然屢試不爽,但會造成一個問題,就是一個Contr...
摘要:一從零搭建環境本次我使用的是編輯器來搭建和環境首先,我們在新建項目的時候,選擇,然后就行了。可以看出,本次的版本為。這是一個非常好用的插件,有了它我們可以不用寫繁瑣的方法。非常適合我們做一些簡答的測試和小功能。 前言 只有光頭才能變強。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家對SpringB...
閱讀 3792·2021-11-12 10:34
閱讀 2812·2021-09-22 15:14
閱讀 777·2019-08-30 15:53
閱讀 3195·2019-08-30 12:53
閱讀 1279·2019-08-29 18:32
閱讀 2761·2019-08-29 16:41
閱讀 1056·2019-08-26 13:40
閱讀 1795·2019-08-23 18:07