您好,登錄后才能下訂單哦!
如何深入實踐Spring Boot,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
簡單易用的 Spring Boot,無疑是 Java 開發初學者的指路明燈,更是資深 Java 開發者的得力助手。快速開發是研發 Spring Boot 的初衷,這不但是一個開發團隊的終生追求,也是一個企業解放生產力、提高生產效率的保障。
Spring Boot 的組件化整合規則,完美地整合了云應用開發工具,使其在云計算領域中處于領先地位,為創建高可用和高性能的服務提供了更加簡便和快捷的方法。
Spring Boot 是從 Spring 框架發展起來的,所以對于使用 Spring 框架的龐大用戶群體來說,隨著 Spring Boot 的普及使用,將使眾多開發者成為它的擁躉。
1. 企業項目開發的時候,Spring Boot 有哪些使用場景呢,已知的坑是什么呢?
SSO,分布式文件系統,微服務使用等等,在企業版應用中,這些都是非常頂用的。如果硬說有坑的話,就是服務多了,服務部署和運維管理必須要上一個檔次,否則就會顯得混亂起來。
2. 個人感覺,從快速構建方面確實很高效,而且這樣框架也是經過了很多實踐之后,結晶的產品。但是,對于新人來說,直接應用 Spring Boot,還是感覺不是很理想,可能會使新人對于 Spring 框架的理解上產生阻礙。對于 Spring Boot 本身,還是非常不錯的,云部署,快速構建都很不錯。我的問題是,公司對于 Spring Boot 的應用有什么要求嗎?一般開發會在什么情況下使用它?對于企業級的開發是否也有要求?
Spring Boot 對背景知識沒有特別要求,對于新人來說,搭建好項目讓其跟隨開發,更加容易入手。對于公司的要求,主要看工程的規模和部署的方式,如果使用 Docker 部署并需要設置負載均衡等對運維人員和服務器的要求會高一些。
3. 經常看到 Spring Boot 和微服務關聯起來,是因為 Spring Boot 開發和部署比較快么,能具體說說么?
Spring Boot 確實是以快速開發為目標而設計的,它的簡單易用的特性確實減輕了開發者的負擔,從而可以提高開發的生產率。你的問題需要全面理解一下 Spring Boot,可以通過它的官方網站進行一些了解。
完整的參考 DEMO — 不寫一行代碼即運行一個應用
4. 這個框架適合開發什么類型的項目
最適合用來開發 Web 應用項目。
1. 已經使用 Spring Boot 有幾個月了,也開始在使用 Spring Boot 搭建公司的基礎系統。我理解的 Spring Boot 應該是提倡以 jar 的形式部署,但這種方式在包的體積過大的情況下部署太慢了,之前我們的業務和服務器都在國外,上傳的時候速度慢得一塌糊涂,除了改成 war 發布,還有什么其他辦法么?
其實最好的方式,還是使用 jar,然后結合使用 Docker 來發布。如果一個項目的 jar 包過大的話,要看看造成這種情況的主要原因是什么。是不是 jar 包中包含的資源文件太多,還是項目包含的業務太復雜,如果是前種原因,考慮優化一些圖片資源,或者使用分布式文件系統來存儲圖片資源。如果是后一種原因,是不是考慮將原項目使用模塊化方式進行細分。
@采蘑菇的大叔 貢獻的 DEMO http://git.oschina.net/icer/iblog。用 SpringBoot 搭了個架子,整合了 freemarker 和 mybatis。
2. Spring Boot 集成了服務器,以 jar 文件發布,減少對外部文件和環境依賴。但長期集成導致體積過大,這的確是個問題,能不能考慮做一些工具對 jar 進行減肥呢?
這就要分析一下造成 jar 過大的原因是什么,如果是因為資源文件太多造成的,那就要優化一些圖片的設計,或使用其它方式來鏈接資源文件,如果是因為一個項目包含的業務太多太復雜造成的,就要考慮是否可以將項目進行拆分。
3. 如果是用 Spring Boot 來做成 jar 服務啟動,怎么衡量服務粒度。因為每個服務都要運行 Spring,或者也會加個 dubbo 的依賴等等。跑起多個實例,這就重復了。其實就是單體應用跟分布式應用的點。
主要還是看你怎樣配置服務,如果使用 Spring Cloud 的服務發現來管理服務,可以通過負載均衡的配置支持多個服務同時對外提供服務。
4. Spring Boot 同樣支持以標準的 war 方式部署應用,只是在啟動類上需要進行細微的調整,并不強調始終以 jar 方式部署。
Spring Boot 應該是鼓勵以 jar 的方式部署,隨著 Spring Boot 一起來的應該是想推動微服務。個人見解,僅供討論。(@采蘑菇的大叔)
5. 使用 Spring Boot 的時候,頁面文件會被打包到 jar 中,如果只更新頁面文件,又要對 jar 進行打包上傳。有沒有簡單的方法?類似原先的 Tocmat 部署就可以直接修改頁面文件。不需要重啟的方法?
可以使用 war 方式部署 。
6. Spring Boot 項目如何做到 libs jar 和 app jar 分開,很多時候,我只是更新應用層代碼,本地編譯好上傳上去,啟動的時候通過腳本啟動,那么如何將 libs 和 app 分別打包并啟動呢?
使用 war 方式發布就可以實現你的要求。
1. 請簡單介紹一下 Spring Boot 和 Docker 結合
真要簡單地說:將 Spring Boot 項目打包成 jar,然后通過 Docker 進行部署。用 Spring Boot 開發的項目,非常適合用 Docker 來部署。
這兩個東西之間沒有任何關系。Spring Boot 主要的目的是簡化開發和部署過程中配置文件的使用,使用了很多約定俗成的規則,按照這些約定的規則來開發,可以大大減少配置文件的使用,甚至完全不使用配置文件都是可能的。Docker 只是把運行環境,像 OS、JVM、Nginx 等等打包到一起的個工具而已。把 Spring Boot 生成的可執行的 jar 包放進這個運行環境中來運行。這兩個工具都只是簡化了開發和運維的繁雜過程,使用了很多自動化處理的技術而已。(@清靜無虞)
2. Spring Boot 從開發到部署的最佳實踐 ,是否必須依賴容器技術,如何平滑過渡到 Docker 容器上?
Spring Boot 并不依賴 Docker 容器,也可以使用 war 方式或者按照傳統的方式直接使用文件系統來發布,只是使用 Docker,更能發揮它在各個方面優勢。
3. 能分享下 Spring Cloud 和 Docker 部署方面的經驗嗎?
使用 Docker 發布 Spring Boot 項目(https://my.oschina.net/syic/blog/799656)
1. 舊的項目轉到 Spring Boot 有什么條件?
不需要什么條件,使用 Spring Boot,最好是對原來的項目進行重新設計,或者使得原來的邏輯進行重建。
2. 是不是微服務架構比較適合用 Spring Boot?那對于老的系統或代碼,怎么轉到 Spring Boot?
所有使用 Web 方式開發的項目都適合使用 Spring Boot 框架,并從中獲益,微服務開發是它的一大特色。舊系統的代碼不能轉換,可以使用原來的業務邏輯進行重建。
1. 幾年前做開發還是用的 Spring,包括 Spring 的 Bean 工廠方案還有 SpringMVC,現在主要業務的開發一般用的公司自研框架,所以對 Spring 感覺比較生疏了,我就想了解了解,Spring Boot 同幾年前的 Spring 相比,都有哪些方面的發展和變化,能大概講講嗎?
Spring Boot 是在 Spring 的基礎建立起來的,保留了 Spring 的一些精髓,同時也摒棄了一些糟粕,表現在:
統一工程配置,可以不使用 XML 配置
使用一些組件,具有自動配置的功能
內嵌了 Tomcat,性能指標等服務
更方便獨立部署或使用 Docker 配置成高可用和高性能的平臺
2. Spring Boot 與傳統 SSH 框架的主要區別在哪些方面?
Spring Boot 能最大限度地簡化配置,也可以嵌入 Tcomcat 等服務,并且在開發企業級應用、分布式應用等方面更加得心應手,更加難能可貴的是使用非常簡單,非常適合快速開發的需要,符合軟件工程構件化發展的目標。
3. Spring Boot 和 Spring MVC 有什么區別?
Spring MVC 還是屬于 Spring 框架的,Spring Boot 是在 Spring 的基礎之上建立的一個全新開發框架。
4. Spring Boot 構建微服務,和目前一些新的例如 light java framework , sparkjava 在構建微服務上有什么優勢?
在 Spring Boot 家族中,使用云應用開發工具集 Spring Cloud 開發微服務應用,具有得天獨厚的優勢。這里所說的微服務,是指功能強大,業務單一的分布式應用系統,并非簡單指項目的微型結構。
5. 用了 Spring Boot 是不是就不用再搞 Spring、SpringMVC、Hibernate、Struts、MyBatis 這些了?
對的,十分正確。對于數據庫來說,使用 JPA 就能一網打盡了。
6. Spring Boot 還是很喜歡的,簡化了不少配置,但實際中微服務的劃分是個問題。
服務的劃分這個和 Spring Boot 沒有任何關系。微服務的一個難點就是服務的劃分,有些服務是按技術特點來劃分,比如像 push 服務、sms 服務等。有些是按業務特點來劃分,像訂單服務等,有些根據實際情況還進行服務的分層。
7. 使用 Spring Boot,其他的必須框架還需要配置嗎?
如果使用 Maven 或其它項目管理工具,都可以在工程配置引用依賴包。
1. Spring Boot 有多種 Web 容器如默認的 Tomcat, Undertow 等,從綜合上使用哪一個性能更好。Undertow 如何像 Tomcat一樣配置 http 自動跳轉到 https?
跟 Tomcat 相比,Jetty 會顯得更加小巧一些,但是綜合來看,還是使用默認的 Tomcat 比較實在。
Undertow 比 Tomcat 性能要好得多,https 一般不需要在 Undertow 這一層來配。一般都會在 Undertow 之前加一個 Nginx,在 Nginx中配置就行了。(@清靜無虞)
性能測試 Undertow 比 Tomcat 稍好一些。穩妥可以用 Tomcat,想改換一下思路可以用 Undertow。http redirect to https 用 Undertow 有折中的辦法是引入 Spring Security。不過一般還是應該前端配 Nginx 或者 Apache Http Server 對外開放 https 服務,內部用 http 做反向代理通道協議。(@二的基本算合格)
http://menelic.com/2016/01/06/java-rest-api-benchmark-tomcat-vs-jetty-vs-grizzly-vs-undertow/看了這個博客,雖然 Tomcat 慢一些,但是實際業務中 Tomcat 并不會是瓶頸,使用 Tomcat 也是一個很好的選擇,畢竟使用了這么多年了,對各項配置也比較熟悉了。(@夢朝思夕)
2.
我用 Spring Boot 很久了,從 1.2.5 開始用,最近一個項目預計使用分布式高可用,我也把該弄的框架都弄好了,可是最后客戶取消分布式高可用,采用傳統模式。Java 只負責后臺接口,APP 接受數據,我現在有個權限問題,原來用的 Spring Security 做的權限前后端分離,現在只有接口,這個權限怎么進行管理,我看里面有回答說用 Spring Cloud 進行權限控制,這個 Cloud 對傳統模式是否繁重?
定時任務的調度,自有 Quartz 調度是否支持集群,多個節點(非集群 ng 分發),但是定時任務我想讓他集群,不允許多個節點都啟動調度任務,只能某一節點不能執行其他節點才能觸發,這個需要用 zookeeper 之類工具進行監測么?
對于企業級應用來說,權限管理建議使用 SSO 的方式來實現,這在《深入實踐 Spring Boot》一書中有實際的使用實例,主要也是使用了 Spring Security 和 OAuth3 的技術。
Zookeeper 和 Spring-Cloud-Eureka 一樣,都是一個服務注冊和發現的管理工具,而 Spring-Cloud-Eureka 在 Spring Boot 中使用,更加適合用來調度使用 Spring Cloud 開發的微服務。至于你所說的定時任務調度,應該不屬于這個范圍吧。
折騰權限會有個 csrf 的問題,樓主要是弄好了分享一下心得唄。問題:開啟 csrf 的話,渲染頁面模版的時候,會生成一個 csrf 字符串,如果 post 提交可以帶上,但如果寫出是 json 的接口,就取不到這個 csrf 了,那么在提交 post 請求的時候就會報一個 csrf 相關的錯誤。(@朋也)
3. Spring Boot 如何更好的更簡潔的實現多表關聯查詢?
在實體建模時為多表建立關聯關系,這樣查詢一個實體對象時就可以連帶查出它關聯的其它對象,即實現多表關聯查詢。
4.
使用 Spring Boot 搭建的微服務是否考慮服務之間的權限,例如訪問權限,若需要,Spring Boot 本身有提供比較好的解決方案嗎?
Spring Boot 目前對于 Spring Cloud 生態有很好的支持和定制化嗎?
Spring Boot 及其前身 Spring,對于任何第三方都能提供很好的支持,更不用說對 Spring Cloud 的支持了。對于系統的安全管理和訪問控制,推薦使用 Spring Cloud 的 SSO,它與 Spring Boot 框架能夠達到非常融洽的效果。
5. 在使用 Spring Boot 來開發公司產品的時候,根據業務進行拆分,這樣最后部署的時候會出現 N 個 jar。這樣的情況下,除了用 Docker 來部署還有別的什么方式嗎?在部署方面有沒有哪些需要注意的地方?
N 好像有點大吧,原來的工程分成十幾個項目,已經很不錯了。使用 Spring Boot 的好處是,可以統一項目配置,和使用發現服務,并更好地管理負載均衡,提高系統的高可用性。
6. 請問用 jar 的方式發布,如何在系統重啟后能自動啟動?
Spring Boot 打包的是個可運行的 jar,使用 Java 命令來啟動。寫個 shell 腳本來啟動就行了,把 shell 腳本設置為開機運行。不管使用哪種方式部署,自動啟動都需要編寫腳本來實現。(@清靜無虞)
7. 在 Spring Boot 中,如何通過參數配置,設置 Tomcat 的 maxConnections 屬性?
在 Spring Boot 的配置文件中好像沒有這個配置參數,如果一定要這個配置,也可以將項目用 war 方式發布,然后像以前配置 Tomcat 一樣配置。
8. Spring Boot 做 REST API 開發如何?如果 Controller 接受的參數模型比較復雜,基本是對象一層套一層,那如何定制這類的 API 接口?
在存儲庫接口中使用注解 @RepositoryRestResource,就能直接提供 Rest API
在控制器中使用 @RestController,其中所定義的 URL 就同時是一個 Rest 資源
9. Spring Boot 在開發階段有熱部署嗎?類似 JRebel 那種
如果設置成連接 Tomcat 服務器來啟動應用,可以設置成熱部署的方式。
關于如何深入實踐Spring Boot問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。