搭建一個(gè)java項(xiàng)目的腳手架總結(jié)

搭建一個(gè)java項(xiàng)目的腳手架總結(jié)

最近一個(gè)月在公司經(jīng)歷了兩個(gè)項(xiàng)目的從零到一的過程备埃,都涉及到了從最初的只有需求篓足,沒有代碼倉庫的情況未状。一般情況下,迫于時(shí)間壓力蜕径,我們一直都期望在一個(gè)比較完善項(xiàng)目上做小的修改两踏,但是,往往天不隨人愿兜喻,這里我整理一下一個(gè)新項(xiàng)目搭建的普遍方法梦染,作為后續(xù)的工作之用,從而提高效率朴皆。

1.reade.md

編寫readme文檔帕识,其如要內(nèi)容需要包括,但不限于如下內(nèi)容:

  • 項(xiàng)目簡介:用一兩句話簡單描述該項(xiàng)目所實(shí)現(xiàn)的業(yè)務(wù)功能遂铡;
  • 技術(shù)選型:列出項(xiàng)目的技術(shù)棧肮疗,包括語言、框架和中間件等扒接;
  • 本地構(gòu)建:列出本地開發(fā)過程中所用到的工具命令伪货;
  • 領(lǐng)域模型:核心的領(lǐng)域概念,比如對于示例電商系統(tǒng)來說有Order钾怔、Product等碱呼;
  • 測試策略:自動(dòng)化測試如何分類,哪些必須寫測試宗侦,哪些沒有必要寫測試愚臀;
  • 技術(shù)架構(gòu):技術(shù)架構(gòu)圖;
  • 部署架構(gòu):部署架構(gòu)圖凝垛;
  • 外部依賴:項(xiàng)目運(yùn)行時(shí)所依賴的外部集成方懊悯,比如訂單系統(tǒng)會依賴于會員系統(tǒng);
  • 環(huán)境信息:各個(gè)環(huán)境的訪問方式梦皮,數(shù)據(jù)庫連接等炭分;
  • 編碼實(shí)踐:統(tǒng)一的編碼實(shí)踐,比如異常處理原則剑肯、分頁封裝等捧毛;
  • FAQ:開發(fā)過程中常見問題的解答。

注意:readme文檔让网,一定要持續(xù)更新呀忧,否則,會造成文檔和代碼的不一致

2.便攜的腳本
盡可能多的提供自動(dòng)化腳本溃睹,能夠也能降低新人的上手難度和恐懼感而账,使其更加自信

  • 打開idea
  • 本地運(yùn)行
  • 本地構(gòu)建

3.代碼分布
經(jīng)過查看網(wǎng)上的相關(guān)資料,關(guān)于代碼結(jié)構(gòu)因篇,我在考慮是否可以可以放棄按照controller泞辐,service笔横,dao,entity的分包方式咐吼,而采用按照業(yè)務(wù)分包的方式(如business1吹缔,business2)。

  • 1.前者是按照技術(shù)的方式分包锯茄,后者是按照業(yè)務(wù)的方式分包
  • 2.前者會導(dǎo)致業(yè)務(wù)代碼比較分散厢塘,后者能保證同業(yè)務(wù)內(nèi)的代碼盡可能的聚合
  • 3.在代碼的日常維護(hù)修改中,前者的修改往往也會比較分散肌幽,而后者往往能夠聚合在一起
  • 4.當(dāng)項(xiàng)目需要進(jìn)行拆分的時(shí)候晚碾,前者的耦合會比較緊密,拆分可能會比較困難喂急,而后者可能會比較容易

4.自動(dòng)化測試
4.1 自動(dòng)化測試的分類

  • 單元測試(src/test/java):核心的領(lǐng)域模型迄薄,包括領(lǐng)域?qū)ο?比如Order類),F(xiàn)actory類煮岁,領(lǐng)域服務(wù)類等;
  • 組件測試(src/componentTest/java):不適合寫單元測試但是又必須測試的類涣易,比如Repository類画机,在有些項(xiàng)目中,這種類型測試也被稱為集成測試新症;
  • API測試(src/apiTest/java):模擬客戶端測試各個(gè)API接口步氏,需要啟動(dòng)程序。

5.日志處理
關(guān)于日志記錄重點(diǎn)需要考慮兩個(gè)問題:

  • 鏈路追蹤徒爹,比如MDC(Mapped Diagnostic Context)
  • 多節(jié)點(diǎn)下荚醒,日志集中記錄,使用elk達(dá)到es中

6.異常處理
異常處理需要考慮的問題:

  • 格式統(tǒng)一
  • 上下文和結(jié)構(gòu)化信息
  • 異常的唯一標(biāo)識

7.定時(shí)任務(wù)
定時(shí)任務(wù)主要考慮的問題是分布式鎖隆嗅,可以使用的技術(shù)包括Shedlock界阁、Redis、ZooKeeper和Hazelcast等的分布式鎖實(shí)現(xiàn)機(jī)制

8.編碼風(fēng)格
google胖喳、alibaba泡躯、唯品會

9.靜態(tài)代碼檢查

  • Checkstyle:用于檢查代碼格式,規(guī)范編碼風(fēng)格
  • Spotbugs:Findbugs的繼承者(用過)
  • Dependency check:OWASP提供的Java類庫安全性檢查
  • Sonar:用于代碼持續(xù)改進(jìn)的跟蹤(用過)
  1. 健康檢查
    健康檢查的主要作用:
  • 初步檢查程序是否運(yùn)行正常
  • 負(fù)載均衡軟件會通過一個(gè)健康檢查URL判斷節(jié)點(diǎn)的可達(dá)性

11.接口文檔
swagger

12.數(shù)據(jù)庫遷移
flyway

13.多環(huán)境(profile)

  • local:用于開發(fā)者本地開發(fā)
  • ci:用于持續(xù)集成
  • dev:用于前端開發(fā)聯(lián)調(diào)
  • qa:用于測試人員
  • uat:類生產(chǎn)環(huán)境丽焊,用于功能驗(yàn)收(有時(shí)也稱為staging環(huán)境)
  • prod:正式的生產(chǎn)環(huán)境

14.跨域處理(CORS)
前后端應(yīng)用分別部署在兩個(gè)不同的域名下是较剃,需要進(jìn)行跨域處理

  1. 常用的第三方庫
  • Guava:來自Google的常用類庫
  • Apache Commons:來自Apache的常用類庫
  • Mockito:主要用于單元測試的mock
  • DBUnit:測試中管理數(shù)據(jù)庫測試數(shù)據(jù)
  • Rest Assured:用于Rest API測試
  • Jackson 2:Json數(shù)據(jù)的序列化和反序列化
  • jjwt:Jwt token認(rèn)證(暫時(shí)未使用過)
  • Lombok:自動(dòng)生成常見Java代碼,比如equals()方法技健,getter和setter等写穴;
  • Feign:聲明式Rest客戶端
  • Tika:用于準(zhǔn)確檢測文件類型(暫時(shí)未使用過)
  • itext:生成Pdf文件等(暫時(shí)未使用過)
  • zxing:生成二維碼
  • Xstream:比Jaxb更輕量級的XML處理庫(暫時(shí)未使用過)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雌贱,隨后出現(xiàn)的幾起案子啊送,更是在濱河造成了極大的恐慌偿短,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件删掀,死亡現(xiàn)場離奇詭異翔冀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)披泪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門纤子,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人款票,你說我怎么就攤上這事控硼。” “怎么了艾少?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵卡乾,是天一觀的道長。 經(jīng)常有香客問我缚够,道長幔妨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任谍椅,我火速辦了婚禮误堡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雏吭。我一直安慰自己锁施,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布杖们。 她就那樣靜靜地躺著悉抵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摘完。 梳的紋絲不亂的頭發(fā)上姥饰,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音孝治,去河邊找鬼媳否。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荆秦,可吹牛的內(nèi)容都是我干的篱竭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼步绸,長吁一口氣:“原來是場噩夢啊……” “哼掺逼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瓤介,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吕喘,失蹤者是張志新(化名)和其女友劉穎赘那,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氯质,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡募舟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闻察。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拱礁。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辕漂,靈堂內(nèi)的尸體忽然破棺而出呢灶,到底是詐尸還是另有隱情,我是刑警寧澤钉嘹,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布鸯乃,位于F島的核電站,受9級特大地震影響跋涣,放射性物質(zhì)發(fā)生泄漏缨睡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一陈辱、第九天 我趴在偏房一處隱蔽的房頂上張望宏蛉。 院中可真熱鬧,春花似錦性置、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屏歹,卻和暖如春隐砸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝙眶。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工季希, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幽纷。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓式塌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親友浸。 傳聞我的和親對象是個(gè)殘疾皇子峰尝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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