Java項目框架搭建系列(Java學習路線)
已經工作4年,真是時間飛逝。
其實當你在一間公司工作一兩年之後,公司用到的開發框架的基本使用你應該都會了。
你會根據一個現有項目A復制一下搭建出另外一個類似框架的項目B,然後在項目B上進行業務邏輯開發。
如果你更努力一點,你可能有去摸索一些配置的作用,一些問題的排查會更有經驗和自己的想法。
如果你好奇心更強一點,可能會去了解一些框架的原理,各個框架之間是怎麽相互協助工作的。自己能否從無到有將這些框架串聯起來。
想寫一系列這樣的文章:將Java項目開發過程中的一些框架,如何一步步串聯起來,並且結合源碼探索其核心部分原理。以及項目從小項目演變到大項目的過程中,需要開發框架以及結構變化。以及特定業務場景設計。具體概請見下文。
大概使用的開發框架及工具:
基本工具:Eclipse、Maven、Tomcat
前端:Jquery、Vue.js、 Element
後臺核心框架:Spring、SpringMVC、MyBatis
後臺輔助框架:日誌框架Logback、安全框架Shiro、任務調度框架Quartz
分布式框架:Dubbo、RabbitMQ、Redis…………..
除了這些框架還有一些特定業務場景,以及高擴展高可用的架構演變過程等等。
主要分為下面三個階段博客提綱。
階段一:集中式基本架構
一、基本工具:Eclipse、Maven、Tomcat(此篇不寫博客,關於Maven猿友可自行網上安裝教程及博客)
二、Spring介紹及探索:主要就是依賴註入以及AOP原理,Spring使用大多以配置為主,因此從配置入手,結合源碼探索其原理。
三、SpringMVC:以實例入手,結合源碼探索其主要原理。
四、Mybatis:以實例入手,結合源碼以及分頁插件拓展探索其用法及原理。
五、日誌框架Logback:結合實例、配置、源碼了解其原理,並對Logback封裝,使得更加符合實際業務需求。
六、前端框架Vue.js+Element使用,Jquery默認猿友已經會用了。
七、安全框架Shiro:主要登錄及權限認證實例入手,探索其用法。
八、任務調度框架Quartz:實例+配置+源碼探索用法及基本原理。
九、異步線程池使用及業務場景。
十、數據庫事務實例及應用場景
十一、ehcache本地緩存實例及應用場景。
之所以階段一叫集中式基本架構,是因為這種結構適合前端代碼,後臺代碼在一個工程,部署到一臺服務器上裏面。帶來的問題有:性能問題、工程十分臃腫、風險很大、不好叠代。
當然性能問題可以通過集群方式,就是部署到多臺機器上,然後根據用戶訪問的ip進行分流到不同機器響應。目前web項目大多采用這種做法。
但是一旦業務及功能模塊多了起來,需要快速叠代,必然要模塊拆分。因此必須采用分布式架構。
分布式架構一般根據功能進行劃分模塊,以電商為例:對外web端一個模塊、管理web端、商品後臺一個模塊、訂單支付後臺等一個模塊、用戶信息後臺一個模塊。各個模塊之間通過接口服務實時通信,異步通過MQ方式通信、緩存也需要使用分布式緩存框架。
接下來我們看下階段二的博客提綱。
階段二:高擴展、高性能、高可用、快速叠代分布式架構
一、分布式服務框架Dubbo:主要實例以及原理探索。
二、日誌流水透傳:讓同一個請求經過的多個模塊的日誌流水保持一致。
三、分布式消息框架RabbitMQ:實例+配置+源碼理解其原理。
四、任務調度框架Quartz改造:將所有模塊的JOB任務集中管理,以服務調用形式觸發。
五、分布式緩存框架Redis:了解其原理並規範使用,各個模塊定義系統碼,共享緩存內存資源,但是已系統碼隔離。
六、前後端分離:對性能以及用戶體驗較高的web模塊進行前後端分離,前端模塊全部為靜態資源,部署待靜態資源服務器,與controller拆分開。
七、session共享:之前也提到根據功能劃分模塊,多個web模塊對外提供請求相應,那麽就會涉及session共享,一次登錄即可。主要采用tomcat-redis技術實現session共享。
八、OAuth2.0認證和授權:這是擴展外部合作渠道的畢竟之路,如授權給外部商戶獲取你的用戶信息。如微信公眾號就是這種做法,很多可以使用微信登錄以及QQ登錄也是這種做法。
九、封裝常用的業務工具類:如批量導入導出,ftp上傳及下載文件、json處理等等。
十、將框架集成部分抽出形成一個基礎框架:這個非常有意義,可以簡化配置,對框架升級等等。
階段三:適配大數據、高並發以及自動化要求(可能更偏向運維)
一、日誌監控,自動告警:將ERROR日誌通過郵件或短信方式發給對應的開發人員,可以起到很好的提醒作用。
二、自動化部署以及持續集成:模塊多了,上線部署變得更加頻繁的時候,就需要簡化部署流程。
三、代理與負載均衡&集群:根據階段二,一般web項目通過ip進行負載分流,後臺可以使用Dubbo的負載均衡。
四、資源服務器搭建
五、數據讀寫分離
六、分庫分表
七、秒殺設計
八、非關系型數據庫使用
九、大數據工具的使用
我有一個微信公眾號,經常會分享一些Java技術相關的幹貨;如果你喜歡我的分享,可以用微信搜索“Java團長”或者“javatuanzhang”關註。
Java項目框架搭建系列(Java學習路線)