作爲Java工程師,你的Spring用對了嗎?

毋庸置疑,Spring 早已成爲 Java 後端開發事實上的行業標準,無數的公司選擇 Spring 作爲基礎的開發框架,大部分Java 後端程序員在日常工作中也會接觸到 Spring ,在使用的過程中不知道你是否遇到這些問題:

  • 在代碼之外,看着一堆依賴和配置,總是有些摸不清方向;
  • 看着這麼多組件,總是不知道該從何入手;
  • 看着一同入職的小夥伴把框架玩得很溜,總是不明白自己到底哪裏沒開竅;

從2002年誤打誤撞開始寫Java後,就把這門語言當做自己的主要工作語言了,一路上踩過不少坑,因此深有感觸,還記得前些年Spring Boot和Spring Cloud還沒有出現,我們在開發一個互聯網金融相關的項目,大致要求如下:

前端有PC、HTML5和APP,通過接口與後端系統交互,後端再訪問核心系統,所有數據存儲於MySQL中。
整個應用部署在私有云上,應用實例要能根據業務量動態擴容或者縮容,遇到緊急情況時,系統還要能夠自動或者通過後臺開關手動降級…

一連串的需求如潮水般涌來,要命的是留給我們的時間還特別緊張,當時的內心還是有些小崩潰的,後來平復了一下心情,除了那些基本的功能性需求,還梳理了那些非功能性的點:

  • 需要發佈 RESTful Web Services
  • 考慮到系統的吞吐量要求,需要實現讀寫分離,將大部分數據緩存到 Redis 中
  • 系統是集羣化部署的,Web 層的系統可能需要分佈式 Session
  • 系統需要有配置開關,最好開關還要實時生效
  • 系統要能實現服務的自動註冊與發現,在集羣中做到負載均衡
  • 遇到突發流量或者故障,系統要能熔斷
  • 爲了縮短實時鏈路,有些不必要的操作可以通過消息來傳遞
  • 開發、測試、預發佈、生產每個環境的配置文件和配置項會有區別,需要獨立配置
  • ……

長長的清單一眼望不到盡頭,更要命的是產品經理和老闆在提需求時基本不會和你說這些,但在出問題時,沒考慮到這些點,鍋都是你的,誰讓你是專業人士呢。

大廠有豐富的基礎設施,能幫助業務實現很多非功能性需求,但如果是小公司,技術積累不多,那就只能靠加班加點堆積代碼來實現,沒給自己少埋坑,比如把開關做在數據庫裏,每次判斷都SELECT一下,流量一大數據庫就扛不住了;配置文件一多就亂套了,測試的配置一不小心就帶上線了……

直到後面出現了 Spring Boot 和 Spring Cloud,只需引入一些 Starter Dependency,簡單修改一些配置文件,再通過很少量的代碼就可以實現上述需求,它們可以幫助工程師更好地基於 Spring 及各種基礎設施來快速搭建系統,可以說,它們的誕生又一次解放了大家的生產力

所以,Spring Boot 和 Spring Cloud 已成爲 Spring 生態中不可或缺的一環。想成爲一名合格的 Java 後端工程師,Spring Framework、Spring Boot、Spring Cloud 這三者必須都牢牢掌握。

很早之前,極客時間的編輯找到我,想讓我開設一門關於Spring的課程,剛開始我是拒絕的。

在十幾年前,我剛接觸Spring時,國內基本沒什麼好的材料介紹它,更不要說什麼像樣的圖書課程了,我和朋友們一起在滿江紅翻譯了Spring Framework 2.0和2.5的文檔發佈在網上,希望通過完整的中文文檔幫助大家更好地瞭解和使用Spring。

到了3.0時我們就不再組織翻譯了,原因是中文世界裏已經有很多幫助大家學習Spring的東西了,無論是網上的文章還是線下的圖書,大家也都已經把使用Spring做爲工作中的常態了。既然它已如此普遍,那爲什麼還要再去專門做一門課程呢?

後來我調研了一下,市面上有很多書和教程,但對於很多初學者,在學習 Spring 的時候,難免會遇到這些問題:

  • 官方文檔雖然全面,但面對龐雜的知識體系,很多初學者一時不知該從哪裏下手;
  • 手冊式的書籍內容豐富,但平鋪直敘的風格也很難讓人快速抓住重點;
  • 網絡也有很多的文章可以參考,但要不就是知識點太分散,要不就是在圍繞那幾個常見的點“炒冷飯”;
  • 有的教程寫得也很不錯,但只是介紹了某一個框架,那我在面對一打框架的時候,該怎麼把它們結合到一起呢?

除此之外,很少有人會在文章或教程裏去講述框架擴展定製等相關的東西,而我在工作中則經常需要去考慮怎麼讓框架更好地爲業務落地去服務,我也希望能把自己的經驗傳遞給更多的工程師。

原理和實戰相輔相成是本課程的一大特色,整個學習週期你將跟隨我搭建一個線上咖啡館的實戰項目,通過實戰把所有零碎的知識點串聯起來,通過即學即用的方式,讓你把知識點掌握得更牢固,理解得更透徹。

不同於市面上大多數教程,我希望不僅帶給你 Spring Framework、Spring Boot 與 Spring Cloud 的實戰技巧,更讓你瞭解這些工具背後的關鍵機制與實現原理,真正做到活學活用。

我是誰?

我是丁雪豐,喜歡寫程序,也是《Spring Boot實戰》與《Spring攻略》的譯者,目前就職於平安壹錢包,之前也在百度和阿里工作過。期間寫過業務代碼,做過中間件,幹過運維,也搞過系統架構,對Spring 全家桶產品進行過各種封裝與定製,也正因爲這樣的工作經歷,我可以從不同的角度認識和深入理解這些框架。

在這門課程中,我也會把自己這些年積累的第一手經驗毫無保留地分享給大家。

你能獲得什麼?

1.通過經驗學習,提升實戰技巧

課程中會有很多關於“怎麼用”的說明,比如:

  • 怎麼用JPA快速實現一個帶特定分頁查詢的CRUD Repository?
  • 怎麼用Spring MVC實現RESTful Web Service?
  • 怎麼用Spring Boot搭建一個具有較強可運維性的應用?
  • 怎麼通過Sleuth實現服務追蹤等等?

不僅會用,還得用的爽,那些能提升開發效率的框架、工具都在我們的課程涉獵範圍之內。

在講明白“怎麼用”的同時,我也希望能幫助大家解決遇到問題時的“怎麼辦”,比如:

  • 明明做了AOP攔截,我的Bean卻沒有被增強,怎麼辦?
  • Web層部署在集羣中,需要解決分佈式Session的問題,怎麼辦?
  • 一直在用RestTemplate調用Web服務,請求量大了需要優化,怎麼辦?
  • 默認的Tomcat配置不能滿足實際需要,需要修改一些配置,怎麼辦?

在掌握了“怎麼用”,瞭解了“怎麼辦”之後,在實際工作中就可以做到從容應對。

2.通過原理剖析,加深理解認識

  • 爲什麼Spring Boot能做到引入一個依賴就完成一堆配置?
  • 爲什麼Spring Boot最終生成的Jar包可以直接運行?
  • 爲什麼一行代碼都沒改就能在Eureka、ZooKeeper、Consul之間靈活切換註冊中心?

一旦瞭解了它的原理,自然在遇到問題時就能有新的思路,“怎麼做”的靈光乍現也得在日常有所積累。

  • 希望對運行時的Web層和DAO層有更多的把控,要怎麼做?
  • 系統有些關鍵業務指標要輸出給監控系統,又不想自己從頭搞一套接口,要做怎麼做?
  • Spring Boot用的久了,公司有個內部設施也希望能像它一樣有個Starter Dependency,要怎麼做?
  • 手頭負責的系統還是Spring 3.x的,又要引入新的東西,希望能實現Spring Boot那樣的自動配置,要怎麼做?

不僅能知其然,還要能知其所以然,融會貫通後再運用到工作中去,讓Spring真正爲你所用。

3.通過案例實踐,鞏固學習效果

課程以實戰爲主,全程貫穿一個咖啡館的系統—SpringBucks,包含了下單、製作、派送的步驟,隨着課程的推進會不斷豐滿,通過Spring Framework、Spring Boot和Spring Cloud打造一個完整的系統,麻雀雖小五臟俱全,將課程涉及的大部分內容結合起來,並部署到雲上。

現在訂閱有什麼福利?

限時優惠¥99(原價¥129),三杯咖啡的價格,戳我立即訂閱

今日的訂閱用戶,立即邀請你進Spring學習小組(僅限前500),並獲得作者精心整理的Spring學習路徑圖。(獲取方式:關注極客時間公衆號後臺回覆“春天”)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章