久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

SpringBoot學(xué)生公寓報(bào)修平臺(tái):設(shè)計(jì)實(shí)現(xiàn)與部署實(shí)戰(zhàn)

SpringBoot學(xué)生公寓報(bào)修平臺(tái):設(shè)計(jì)實(shí)現(xiàn)與部署實(shí)戰(zhàn) 每年開學(xué)季和期末季學(xué)生公寓的報(bào)修需求都會(huì)集中爆發(fā)——水龍頭漏水、空調(diào)不制冷、寢室燈管閃壞、柜門合不上各種報(bào)修單子從宿管、電話、微信群里涌進(jìn)來(lái)靠人工登記和派單很容易漏單、錯(cuò)單、響應(yīng)慢。我之前帶團(tuán)隊(duì)做過(guò)一個(gè)基于SpringBoot的學(xué)生公寓報(bào)修平臺(tái)從需求梳理、數(shù)據(jù)庫(kù)設(shè)計(jì)到前后端聯(lián)調(diào)、打包部署全部走了一遍過(guò)程中踩了不少坑也沉淀了一些比較實(shí)用的經(jīng)驗(yàn)。這篇博文就把整個(gè)項(xiàng)目的設(shè)計(jì)思路、核心模塊、數(shù)據(jù)庫(kù)表結(jié)構(gòu)、關(guān)鍵代碼實(shí)現(xiàn)以及調(diào)試部署過(guò)程詳細(xì)拆開講希望對(duì)正在做類似管理系統(tǒng)、或者用SpringBoot做畢業(yè)設(shè)計(jì)的同學(xué)有幫助。這類平臺(tái)本質(zhì)上是一個(gè)典型的多角色業(yè)務(wù)管理系統(tǒng)核心價(jià)值就是把“學(xué)生報(bào)修—管理員派單—維修工處理—學(xué)生驗(yàn)收評(píng)價(jià)”這條鏈路搬到線上讓每一步都有記錄、可追蹤、能統(tǒng)計(jì)。先說(shuō)清楚它解決了什么問(wèn)題以前報(bào)修靠紙質(zhì)登記本或者微信群接龍信息分散、狀態(tài)不透明學(xué)生不知道維修師傅什么時(shí)候來(lái)管理員也沒(méi)法快速統(tǒng)計(jì)各樓棟的維修頻率。有了平臺(tái)之后學(xué)生在線提交工單系統(tǒng)自動(dòng)按樓棟、報(bào)修類型分類管理員一鍵指派維修工手機(jī)端接單、填寫維修結(jié)果學(xué)生確認(rèn)后還能評(píng)價(jià)整套流程閉環(huán)數(shù)據(jù)也能沉淀下來(lái)做報(bào)表分析。適合誰(shuí)來(lái)參考如果你正在做SpringBoot相關(guān)的課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)或者想自己動(dòng)手從零搭一個(gè)前后端分離的管理系統(tǒng)這個(gè)項(xiàng)目的完整度很合適如果你已經(jīng)在寫代碼但不太清楚權(quán)限控制、工單狀態(tài)流轉(zhuǎn)這類業(yè)務(wù)怎么落地下面這些內(nèi)容也能給你一些直接的參考。1.1 一個(gè)真實(shí)的學(xué)生公寓報(bào)修流程是什么樣在設(shè)計(jì)系統(tǒng)之前我專門去學(xué)校后勤部門蹲了幾天把線下流程摸了個(gè)清楚。真實(shí)場(chǎng)景大致是這樣的學(xué)生發(fā)現(xiàn)宿舍設(shè)施損壞先找宿管登記宿管手寫一張報(bào)修單然后電話聯(lián)系維修工。維修工有空就上門沒(méi)空就讓宿管盯著修完在單子上簽個(gè)字就算結(jié)束。這中間的痛點(diǎn)是樓棟一多報(bào)修單容易漏宿舍報(bào)修高峰期紙質(zhì)單子堆積響應(yīng)順序全靠人工判斷維修進(jìn)度學(xué)生完全不知道。所以平臺(tái)在還原線下流程的基礎(chǔ)上做了數(shù)字化改造核心流程設(shè)計(jì)成四步學(xué)生提交工單 → 管理員分配維修工 → 維修工處理并填寫結(jié)果 → 學(xué)生確認(rèn)驗(yàn)收并評(píng)價(jià)。每一步都有對(duì)應(yīng)的角色和狀態(tài)約束不允許跨狀態(tài)操作。比如維修工只能處理“待維修”狀態(tài)的工單處理完必須填寫維修耗時(shí)和材料消耗學(xué)生只能在狀態(tài)為“已完成”時(shí)進(jìn)行驗(yàn)收驗(yàn)收不通過(guò)可以退回返修。這樣設(shè)計(jì)的好處是每個(gè)環(huán)節(jié)都有責(zé)任人出現(xiàn)糾紛時(shí)能直接通過(guò)系統(tǒng)日志定位。1.2 為什么選SpringBoot而不是其他框架很多人問(wèn)做個(gè)報(bào)修平臺(tái)用SpringBoot是不是殺雞用牛刀其實(shí)不是。選SpringBoot有幾個(gè)很實(shí)在的理由第一它生態(tài)成熟MyBatis-Plus、Redis、Shiro、MinIO這些常用組件都有非常完善的和SpringBoot的整合文檔開發(fā)效率高第二它內(nèi)置Tomcat打包成jar就能直接跑部署成本低對(duì)學(xué)生項(xiàng)目和中小型系統(tǒng)來(lái)說(shuō)非常友好第三社區(qū)活躍面試和畢業(yè)答辯時(shí)也容易講清楚。另外我對(duì)比過(guò)SSHStrutsSpringHibernate和SpringMVC單體架構(gòu)SSH現(xiàn)在已經(jīng)很少有人用了配置XML太繁瑣純SpringMVC雖然更輕量但要做大量的手動(dòng)配置比如數(shù)據(jù)源、事務(wù)、json轉(zhuǎn)換等。SpringBoot通過(guò)自動(dòng)配置把這些全封裝掉了我們只需要關(guān)注業(yè)務(wù)代碼。當(dāng)然SpringBoot也有弱點(diǎn)就是自動(dòng)配置的黑盒機(jī)制出了問(wèn)題排查起來(lái)比較費(fèi)勁這個(gè)在后面“常見(jiàn)問(wèn)題”部分我會(huì)專門講。1.3 這個(gè)項(xiàng)目交付物里到底包含哪些東西標(biāo)題里提到的“程序源碼數(shù)據(jù)庫(kù)調(diào)試部署開發(fā)環(huán)境”拆開來(lái)看其實(shí)是五個(gè)層次程序是打包好的可運(yùn)行物源碼是可讀、可改的工程代碼數(shù)據(jù)庫(kù)是建庫(kù)建表的SQL腳本和初始數(shù)據(jù)調(diào)試部署是詳細(xì)的啟動(dòng)步驟和常見(jiàn)錯(cuò)誤解決辦法開發(fā)環(huán)境就是JDK、MySQL、IDEA、Maven這些工具的版本和配置要求。我建議拿到項(xiàng)目后先按順序做先導(dǎo)入源碼到IDEA再執(zhí)行SQL腳本初始化數(shù)據(jù)庫(kù)然后修改application.yml里的數(shù)據(jù)庫(kù)連接信息最后啟動(dòng)檢查控制臺(tái)日志。不要一上來(lái)就想改功能先把系統(tǒng)跑通再動(dòng)手改代碼這樣出問(wèn)題的時(shí)候你才知道是環(huán)境問(wèn)題還是業(yè)務(wù)代碼問(wèn)題。2. 整體架構(gòu)與模塊設(shè)計(jì)拆解整個(gè)平臺(tái)采用的是經(jīng)典的SSM微服務(wù)雛形不這里用的是SpringBoot單體架構(gòu)。為什么不用微服務(wù)因?yàn)閷W(xué)生公寓報(bào)修平臺(tái)的核心業(yè)務(wù)是工單流轉(zhuǎn)和人員管理并發(fā)量不大單體架構(gòu)部署簡(jiǎn)單、維護(hù)成本低、事務(wù)控制容易完全夠用。如果硬拆成微服務(wù)反而會(huì)因?yàn)榉植际绞聞?wù)、服務(wù)間調(diào)用等問(wèn)題把項(xiàng)目復(fù)雜度拉高對(duì)學(xué)習(xí)和答辯都不利。這個(gè)選擇我覺(jué)得是合理的在實(shí)際項(xiàng)目中能用單體解決的絕對(duì)不上微服務(wù)。2.1 三種角色一張圖看懂權(quán)限邊界系統(tǒng)里一共三類角色學(xué)生普通用戶、維修工、管理員。權(quán)限邊界用一句話概括學(xué)生管自己的報(bào)修單維修工管被分給自己的任務(wù)管理員管全局配置和數(shù)據(jù)統(tǒng)計(jì)。角色核心權(quán)限主要操作學(xué)生報(bào)修、查詢、評(píng)價(jià)提交報(bào)修工單、查看處理進(jìn)度、確認(rèn)驗(yàn)收、評(píng)價(jià)評(píng)分、修改個(gè)人信息維修工任務(wù)處理查看我的工單、接單/退單、填寫維修結(jié)果、上傳維修后照片管理員全站管理工單派發(fā)/改派、用戶管理、樓棟與報(bào)修類型維護(hù)、數(shù)據(jù)統(tǒng)計(jì)、公告發(fā)布三個(gè)角色共用一套登錄認(rèn)證邏輯登錄成功后返回的角色碼不同前端根據(jù)角色碼渲染不同的菜單后端在接口層級(jí)做權(quán)限攔截。這里我建議權(quán)限校驗(yàn)放在后端做前端隱藏菜單只是體驗(yàn)優(yōu)化不是安全手段。實(shí)際操作中有些同學(xué)只在前端做路由判斷后端接口不攔結(jié)果有人直接調(diào)用接口繞過(guò)了權(quán)限這是很典型的安全漏洞。2.2 報(bào)修工單的生命周期設(shè)計(jì)工單是系統(tǒng)的核心實(shí)體我把它的狀態(tài)設(shè)計(jì)成七個(gè)待派單、待接單、維修中、已完成、已驗(yàn)收、已駁回、已取消。狀態(tài)的變遷不是隨意的而是有嚴(yán)格的動(dòng)作約束學(xué)生提交后工單進(jìn)入“待派單”狀態(tài)此時(shí)只有管理員能看到并派單。管理員派單給某個(gè)維修工后狀態(tài)變?yōu)椤按訂巍本S修工可以接單狀態(tài)變?yōu)椤熬S修中”也可以申請(qǐng)退單退回給管理員。維修工處理完成并填寫結(jié)果后狀態(tài)變?yōu)椤耙淹瓿伞贝藭r(shí)學(xué)生端才會(huì)出現(xiàn)“驗(yàn)收”按鈕。學(xué)生點(diǎn)擊驗(yàn)收通過(guò)后狀態(tài)變?yōu)椤耙羊?yàn)收”流程結(jié)束如果驗(yàn)收不通過(guò)可以填駁回意見(jiàn)工單重新回到“待派單”狀態(tài)管理員可重新派單或催辦。“已取消”狀態(tài)主要用于學(xué)生提交后發(fā)現(xiàn)填錯(cuò)或自行解決了在沒(méi)有被派單之前取消。一旦派單學(xué)生就不能自行取消了得聯(lián)系管理員處理。這里有一個(gè)非常容易踩坑的地方狀態(tài)字段如果用int存代碼里每個(gè)數(shù)字代表什么含義很容易忘記特別容易改錯(cuò)。我建議用枚舉統(tǒng)一管理代碼里只允許通過(guò)枚舉轉(zhuǎn)換數(shù)據(jù)庫(kù)里存字符串枚舉名這樣可讀性和維護(hù)性都好很多。后面我貼了具體代碼可以直接參考。2.3 功能模塊劃分與接口設(shè)計(jì)整個(gè)系統(tǒng)按業(yè)務(wù)域劃分成六大模塊用戶模塊、工單模塊、報(bào)修類型模塊、樓棟管理模塊、公告模塊、統(tǒng)計(jì)報(bào)表模塊。每個(gè)模塊的接口遵循RESTful風(fēng)格返回統(tǒng)一格式的Result對(duì)象結(jié)構(gòu)為code、message、data三件套。前端先判斷code是否等于200再取data這樣后端拋異常時(shí)也能統(tǒng)一返回code500前端彈一個(gè)錯(cuò)誤提示不白屏。接口命名方面我按資源來(lái)設(shè)計(jì)比如POST /api/repair/order 提交工單GET /api/repair/order/list 查詢工單列表支持分頁(yè)和條件查詢PUT /api/repair/order/assign 管理員派單PUT /api/repair/order/processing 維修工接單/處理PUT /api/repair/order/accept 學(xué)生驗(yàn)收這種以資源加動(dòng)作為核心的命名方式前后端對(duì)接的時(shí)候非常直觀也方便寫接口文檔。開發(fā)期間我把接口文檔用Swagger生成寫接口的時(shí)候就順手加上注解省得后面還要單獨(dú)維護(hù)文檔。3. 數(shù)據(jù)庫(kù)設(shè)計(jì)與核心表結(jié)構(gòu)數(shù)據(jù)庫(kù)設(shè)計(jì)是整個(gè)項(xiàng)目的地基地基沒(méi)打好后面寫接口的時(shí)候就會(huì)各種別扭。我在設(shè)計(jì)時(shí)遵循幾個(gè)原則一是表名和字段名用清晰的英文命名二是所有業(yè)務(wù)表都要有id、create_time、update_time這三個(gè)字段三是金額、狀態(tài)這類字段用int或decimal存不要用varchar存數(shù)字否則排序和統(tǒng)計(jì)都會(huì)出問(wèn)題。3.1 核心表設(shè)計(jì)一覽系統(tǒng)核心共八張表我把最關(guān)鍵的列和說(shuō)明列出來(lái)表名說(shuō)明關(guān)鍵字段t_user用戶表id、username、password、real_name、role_id、phone、dormitory_idt_repair_order報(bào)修工單表id、order_no、student_id、dormitory_id、type_id、description、images、status、processor_id、process_time、apply_remarkt_repair_type報(bào)修類型表id、type_name、sortt_dormitory樓棟/宿舍表id、building_no、room_no、managert_repair_log工單操作日志表id、order_id、operator_id、action、remark、create_timet_announcement公告表id、title、content、publisher_id、create_timet_comment評(píng)價(jià)表id、order_id、student_id、score、content、create_timet_role角色表id、role_name、role_code3.2 工單表的設(shè)計(jì)細(xì)節(jié)t_repair_order是核心我把幾個(gè)容易出問(wèn)題的地方單獨(dú)說(shuō)一下。首先是order_no工單編號(hào)我用了“日期流水號(hào)”的生成規(guī)則格式是20250613001含義是2025年6月13日第1單。生成邏輯是查當(dāng)天最大編號(hào)加1用Redis的incr做自增計(jì)數(shù)更穩(wěn)但如果沒(méi)有Redis用查詢鎖也能實(shí)現(xiàn)只是并發(fā)高時(shí)有可能會(huì)重復(fù)需要注意加數(shù)據(jù)庫(kù)唯一索引兜底。其次是images字段存的是用戶上傳的故障照片URL多個(gè)用逗號(hào)分隔。有些同學(xué)會(huì)單獨(dú)建一張圖片表也可以但在照片數(shù)量不多的小系統(tǒng)里直接用分隔符存儲(chǔ)更簡(jiǎn)單查詢工單詳情時(shí)切分一下就能渲染。我實(shí)際開發(fā)時(shí)是把圖片傳到MinIO返回的URL直接存到images字段里包工時(shí)再把URL取出拼接成json傳給前端。第三是processor_id表示當(dāng)前負(fù)責(zé)的維修工。一個(gè)工單在流轉(zhuǎn)中可能被多次改派所以processor_id只存當(dāng)前處理人歷史流轉(zhuǎn)記錄全部記到t_repair_log里。這樣的設(shè)計(jì)讓工單表本身保持簡(jiǎn)潔同時(shí)日志表可以追溯整個(gè)處理過(guò)程審計(jì)也方便。3.3 邏輯刪除與樂(lè)觀鎖的實(shí)踐開發(fā)過(guò)程中我踩過(guò)一個(gè)很經(jīng)典的坑刪除用戶時(shí)直接delete結(jié)果把歷史工單里的學(xué)生關(guān)聯(lián)搞沒(méi)了導(dǎo)致工單統(tǒng)計(jì)的時(shí)候數(shù)據(jù)對(duì)不上。后來(lái)我給所有業(yè)務(wù)表都加了deleted字段用MyBatis-Plus的TableLogic做邏輯刪除。查詢時(shí)框架自動(dòng)拼接deleted 0刪除操作實(shí)際是update歷史數(shù)據(jù)永遠(yuǎn)保留。這個(gè)習(xí)慣我在做其他系統(tǒng)時(shí)也沿用強(qiáng)烈建議大家從一開始就加上。樂(lè)觀鎖則用在工單狀態(tài)的并發(fā)更新上。設(shè)想一個(gè)場(chǎng)景管理員在處理工單的同時(shí)維修工也點(diǎn)了接單兩個(gè)請(qǐng)求同時(shí)讀到狀態(tài)是“待接單”都執(zhí)行了update就可能出現(xiàn)狀態(tài)覆蓋。解決辦法是給t_repair_order加version字段更新時(shí)帶上WHERE version #{version}判斷影響行數(shù)如果為零說(shuō)明被別人改過(guò)了提示用戶稍后重試。MyBatis-Plus自帶Version插件開啟樂(lè)觀鎖只是幾行配置的事強(qiáng)烈推薦加上。4. 核心功能實(shí)現(xiàn)的幾個(gè)關(guān)鍵點(diǎn)這一部分我講一下開發(fā)過(guò)程中值得反復(fù)斟酌的幾個(gè)技術(shù)點(diǎn)每個(gè)都涉及到系統(tǒng)的穩(wěn)定性和用戶體驗(yàn)也是答辯時(shí)老師容易追問(wèn)的地方。4.1 工單狀態(tài)機(jī)與流轉(zhuǎn)控制狀態(tài)機(jī)是整個(gè)業(yè)務(wù)最核心的部分。我建議不要在每個(gè)接口里都寫一遍if判斷而是把狀態(tài)流轉(zhuǎn)抽出來(lái)統(tǒng)一管理。實(shí)現(xiàn)方式有輕量和重量?jī)煞N輕量方式是用枚舉加一個(gè)變更校驗(yàn)方法重量方式是引入狀態(tài)機(jī)框架比如Spring StateMachine。對(duì)報(bào)修平臺(tái)這個(gè)規(guī)模用輕量方式就夠了。我自己寫了一個(gè)RepairOrderState枚舉里面定義狀態(tài)和允許的流轉(zhuǎn)目標(biāo)然后提供一個(gè)transition方法進(jìn)入新?tīng)顟B(tài)前先校驗(yàn)當(dāng)前狀態(tài)是否允許流轉(zhuǎn)到目標(biāo)狀態(tài)不允許就拋業(yè)務(wù)異常。這樣所有狀態(tài)更新都走同一個(gè)入口不會(huì)出現(xiàn)在A接口改了狀態(tài)但沒(méi)記錄日志的情況。我把日志寫入也放在transition方法里每流轉(zhuǎn)一次就自動(dòng)往t_repair_log插一條記錄省得每個(gè)接口手動(dòng)去寫日志邏輯統(tǒng)一且不容易漏。4.2 前后端分離下的權(quán)限控制系統(tǒng)采用前后端分離架構(gòu)后端接口用JWT做無(wú)狀態(tài)認(rèn)證。登錄成功后簽發(fā)token前端存到localStorage每次請(qǐng)求在header里帶上Authorization。后端用一個(gè)攔截器統(tǒng)一解析token解析出userId和roleCode放到ThreadLocal里Controller直接取。權(quán)限校驗(yàn)我是在攔截器里根據(jù)角色碼做簡(jiǎn)單判斷哪些接口管理員才能訪問(wèn)哪些是維修工專屬。比如/admin/**開頭的接口只能管理員訪問(wèn)/worker/**只能維修工訪問(wèn)/student/**只能學(xué)生訪問(wèn)。如果接口放錯(cuò)路徑權(quán)限就崩了所以不建議用URL前綴做粗粒度權(quán)限。更合理的做法是使用RequireRole這樣的注解標(biāo)注在Controller方法上攔截器通過(guò)反射讀取注解做校驗(yàn)這樣權(quán)限和接口寫在了一起可讀性也更高。4.3 圖片上傳與MinIO接入的方式報(bào)修必然要上傳故障照片這是整個(gè)項(xiàng)目里最容易出問(wèn)題的一環(huán)。一開始我用的是本地磁盤存儲(chǔ)把上傳的文件寫到服務(wù)器的某個(gè)目錄然后返回URL看起來(lái)簡(jiǎn)單但有兩個(gè)坑一是服務(wù)器重啟后目錄丟失二是前端直接訪問(wèn)磁盤路徑會(huì)有跨域和權(quán)限問(wèn)題。后來(lái)我換成了MinIO一個(gè)開源的對(duì)象存儲(chǔ)服務(wù)部署起來(lái)就一個(gè)docker命令的事本地開發(fā)也可以直接跑。SpringBoot整合MinIO其實(shí)不復(fù)雜。先在pom.xml引入io.minio:minio依賴然后在application.yml配endpoint、accessKey、secretKey、bucketName寫一個(gè)MinioService里面封裝上傳、刪除、獲取訪問(wèn)地址這幾個(gè)方法。上傳時(shí)用UUID給文件重命名防止重名覆蓋。有一點(diǎn)需要注意MinIO的bucket要提前創(chuàng)建并設(shè)置公共讀策略否則前端拿到的URL預(yù)覽會(huì)404。這個(gè)問(wèn)題我當(dāng)時(shí)排查了很久最后發(fā)現(xiàn)是bucket的訪問(wèn)權(quán)限沒(méi)設(shè)置對(duì)。4.4 站內(nèi)信與微信通知的取舍工單狀態(tài)變了學(xué)生怎么第一時(shí)間知道最開始我只做了站內(nèi)信就是工單列表里加個(gè)未讀紅點(diǎn)后來(lái)發(fā)現(xiàn)很多學(xué)生根本不會(huì)主動(dòng)刷新網(wǎng)頁(yè)于是加了WebSocket推送。實(shí)現(xiàn)方式是用Spring的WebSocket握手時(shí)從token里解析userId后端維護(hù)一個(gè)userId到Session的映射工單狀態(tài)變更時(shí)主動(dòng)推送一條消息給對(duì)應(yīng)學(xué)生。這里有個(gè)細(xì)節(jié)WebSocket的Session不是線程安全的多線程并發(fā)推送前要加鎖否則會(huì)出現(xiàn)消息丟失或異常。WebSocket推送只是“錦上添花”實(shí)際運(yùn)行時(shí)如果學(xué)生關(guān)了網(wǎng)頁(yè)推送還是收不到。所以最終方案是站內(nèi)信保底WebSocket只做實(shí)時(shí)提醒。我建議做這類系統(tǒng)時(shí)不要過(guò)度依賴推送數(shù)據(jù)庫(kù)里的消息表才是數(shù)據(jù)本體推送只是通知手段。很多同學(xué)做這類項(xiàng)目喜歡把推送放得很重結(jié)果一重啟連接就全斷反而把系統(tǒng)復(fù)雜度拉高了。5. 開發(fā)環(huán)境搭建與調(diào)試部署實(shí)錄很多人在項(xiàng)目開發(fā)階段很順利一到部署就各種報(bào)錯(cuò)環(huán)境問(wèn)題占了很大比重。我把自己實(shí)際搭建環(huán)境、調(diào)試、部署的過(guò)程完整記錄下來(lái)包括版本選擇、配置項(xiàng)和遇到的重點(diǎn)問(wèn)題照著走基本能少踩一半坑。5.1 開發(fā)環(huán)境版本與安裝說(shuō)明我用的開發(fā)環(huán)境就是標(biāo)題里說(shuō)的“程序源碼數(shù)據(jù)庫(kù)調(diào)試部署開發(fā)環(huán)境”那一套具體版本如下工具推薦版本說(shuō)明JDK1.8 或 11SpringBoot 2.7.x 對(duì)這兩個(gè)版本支持最穩(wěn)IDEA2023.x 及以上社區(qū)版完全夠用不用買旗艦版Maven3.8.x不要用3.9.0之后的版本有些倉(cāng)庫(kù)兼容有問(wèn)題MySQL5.7 或 8.0推薦8.0注意時(shí)區(qū)和驅(qū)動(dòng)配置Redis6.x用于token緩存和工單號(hào)自增安裝順序我建議先裝JDK再裝Maven然后是MySQL最后是Redis。每次裝完都驗(yàn)證一下環(huán)境變量JDK驗(yàn)證命令java -versionMaven驗(yàn)證mvn -vMySQL驗(yàn)證mysql --version。很多的坑往往發(fā)生在環(huán)境變量沒(méi)配置好導(dǎo)致IDEA里編譯的時(shí)候能過(guò)但命令行跑jar包就跑不起來(lái)。5.2 SpringBoot核心配置與關(guān)鍵參數(shù)application.yml是SpringBoot啟動(dòng)的核心我把關(guān)鍵的配置項(xiàng)解釋一下特別標(biāo)注幾個(gè)容易出錯(cuò)的地方server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/repair_platform?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver redis: host: localhost port: 6379 database: 0 servlet: multipart: max-file-size: 10MB max-request-size: 20MB mybatis-plus: mapper-locations: classpath*:mapper/*.xml configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl有幾個(gè)參數(shù)我要特別強(qiáng)調(diào)。第一是serverTimezone如果MySQL用的8.0url里必須帶serverTimezoneAsia/Shanghai否則JDBC驅(qū)動(dòng)會(huì)報(bào)“The server time zone value”的錯(cuò)這是新手最常見(jiàn)的問(wèn)題。第二是map-underscore-to-camel-case這個(gè)開關(guān)默認(rèn)是開的可以讓數(shù)據(jù)庫(kù)字段create_time自動(dòng)映射到Java屬性的createTime省去大量TableField注解。第三是multipart上傳大小的限制如果照片原圖比較大默認(rèn)1MB的限制是不夠的我配置成了10MB實(shí)際一張手機(jī)拍的照片通常在3-5MB左右。5.3 前端資源打包后放進(jìn)SpringBoot的整合技巧實(shí)際部署時(shí)為了省一臺(tái)服務(wù)器我把前端Vue項(xiàng)目打包后的dist目錄直接放進(jìn)SpringBoot的靜態(tài)資源目錄這樣整個(gè)系統(tǒng)就是一個(gè)jar包java -jar啟動(dòng)后既能訪問(wèn)后端接口也能訪問(wèn)前端頁(yè)面非常方便。具體步驟是這樣先在前端項(xiàng)目根目錄執(zhí)行npm run build打包后生成一個(gè)dist目錄。把dist目錄里的全部文件復(fù)制到后端src/main/resources/static目錄下。然后重新用Maven打包后端生成的jar就自帶前端頁(yè)面了。前端打包后默認(rèn)的靜態(tài)資源路徑是/和后端接口的/api前綴不沖突。如果前端用了history路由模式記得要在后端加一個(gè)轉(zhuǎn)發(fā)保證刷新頁(yè)面時(shí)不會(huì)404不然單擊刷新頁(yè)面就報(bào)404非常影響體驗(yàn)。我是在SpringBoot里加了個(gè)WebMvcConfigurer把非/api的路徑全部轉(zhuǎn)發(fā)到index.html幾行代碼搞定。5.4 三種部署方式的對(duì)比與選擇部署方式我試過(guò)三種本地IDEA直接啟動(dòng)、Linux服務(wù)器jar包部署、Docker容器化部署。本地IDEA啟動(dòng)適合開發(fā)調(diào)試按ShiftF10就能跑斷點(diǎn)調(diào)試最方便。Linux服務(wù)器jar部署適合小規(guī)模正式使用把打包好的jar上傳到服務(wù)器執(zhí)行nohup java -jar xxx.jar app.log 21 日志輸出到app.log方便排查。Docker部署適合環(huán)境統(tǒng)一寫一個(gè)Dockerfile把JDK和jar打進(jìn)鏡像再用docker run啟動(dòng)換服務(wù)器的時(shí)候一條命令就能拉起環(huán)境。從穩(wěn)定性角度我最推薦Linuxjar的方式原因很簡(jiǎn)單Docker雖然好但要額外運(yùn)維鏡像倉(cāng)庫(kù)對(duì)學(xué)生項(xiàng)目來(lái)說(shuō)有點(diǎn)重。jar方式只需要一臺(tái)能跑Java的服務(wù)器就夠了出了問(wèn)題看日志也比較直觀。6. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄這部分我把實(shí)際開發(fā)和部署過(guò)程中遇到的高頻問(wèn)題記錄下來(lái)按照現(xiàn)象、原因、解決辦法三個(gè)維度整理成速查表方便你遇到同樣問(wèn)題的時(shí)候直接對(duì)號(hào)入座。6.1 啟動(dòng)時(shí)報(bào)數(shù)據(jù)庫(kù)連接錯(cuò)誤報(bào)錯(cuò)信息一般是“Cannot connect to MySQL server”或“Access denied for user”。大多數(shù)原因是數(shù)據(jù)庫(kù)沒(méi)有啟動(dòng)、賬號(hào)密碼不對(duì)、或者url里的host端口寫錯(cuò)。排查順序建議先手動(dòng)用命令行mysql -u root -p試試能不能連上確認(rèn)數(shù)據(jù)庫(kù)本身沒(méi)問(wèn)題再看SpringBoot配置文件的url、username、password是否一致。還有一個(gè)隱蔽原因如果你的MySQL跑在遠(yuǎn)程服務(wù)器上本地連不上可能是MySQL的bind-address默認(rèn)綁定了127.0.0.1需要改成0.0.0.0然后授權(quán)遠(yuǎn)程訪問(wèn)。這個(gè)我在自己的項(xiàng)目里遇到過(guò)本地IDEA能連部署到服務(wù)器上就連不上最后發(fā)現(xiàn)是MySQL的安全配置問(wèn)題不是SpringBoot代碼的問(wèn)題。6.2 端口被占用怎么辦jar部署時(shí)最常遇到的報(bào)錯(cuò)是“Port 8080 was already in use”。先用netstat -tlnp | grep 8080找到占用端口的進(jìn)程確認(rèn)是不是自己之前啟動(dòng)的舊進(jìn)程kill掉之后重新啟動(dòng)就好。如果你有多個(gè)項(xiàng)目要同時(shí)跑可以在application.yml里用server.port改成8081、8082等也可以啟動(dòng)時(shí)用--server.port8081覆蓋配置文件里的端口靈活一些。如果服務(wù)器上已經(jīng)有nginx或其他服務(wù)占用了80端口我一般會(huì)把SpringBoot服務(wù)跑在8080然后通過(guò)nginx反向代理到80對(duì)外提供服務(wù)。這樣既不影響現(xiàn)有服務(wù)又不用改代碼。6.3 Maven依賴沖突與下載失敗SpringBoot項(xiàng)目依賴多時(shí)不時(shí)會(huì)遇到j(luò)ar包下載失敗或者依賴沖突。下載失敗大概率是Maven倉(cāng)庫(kù)源的問(wèn)題國(guó)內(nèi)網(wǎng)絡(luò)訪問(wèn)中央倉(cāng)庫(kù)經(jīng)常超時(shí)我建議在settings.xml里把鏡像源換成阿里云鏡像基本一次解決。依賴沖突的表現(xiàn)是啟動(dòng)時(shí)報(bào)NoClassDefFoundError或者bean創(chuàng)建異常原因一般是同一個(gè)類有多個(gè)版本的jar被加載。排查依賴沖突的命令是mvn dependency:tree看依賴樹里有沒(méi)有重復(fù)的jar包。比如很多同學(xué)同時(shí)引入了spring-boot-starter-web和spring-boot-starter-actuator版本不一致時(shí)就會(huì)出現(xiàn)沖突。解決辦法是使用Maven的依賴管理機(jī)制通過(guò)dependencyManagement統(tǒng)一版本號(hào)或者用exclusion把多余的傳遞依賴去掉。我自己的習(xí)慣是在pom.xml的properties里統(tǒng)一聲明版本減少版本沖突的可能性。6.4 文件上傳后無(wú)法預(yù)覽或丟失圖片上傳后前端拿不到預(yù)覽圖這個(gè)問(wèn)題的原因是多樣的。如果是MinIO存儲(chǔ)先確認(rèn)bucket是否設(shè)置了公開讀權(quán)限如果是本地存儲(chǔ)檢查上傳文件路徑是否真的有文件以及返回的URL是否能通過(guò)瀏覽器直接訪問(wèn)。還要注意一個(gè)細(xì)節(jié)SpringBoot默認(rèn)對(duì)靜態(tài)資源的映射不包括磁盤上的其他目錄所以本地存儲(chǔ)時(shí)我建議把上傳目錄放到resources/static下的uploads文件夾或者通過(guò)自定義資源映射把磁盤路徑映射成/image/**,否則前端訪問(wèn)不了。文件丟失的問(wèn)題通常是服務(wù)器重啟后磁盤文件沒(méi)了所以我一直推薦用MinIO或者OSS把文件數(shù)據(jù)和服務(wù)本身解耦服務(wù)器掛了也不怕。這一點(diǎn)在標(biāo)題里雖然沒(méi)有直接體現(xiàn)但“minio加入到springboot”這個(gè)點(diǎn)很多人在做報(bào)修平臺(tái)時(shí)都會(huì)用到我也就順便講透。6.5 一個(gè)容易被忽略的bug事務(wù)失效在把多個(gè)寫操作放在一起的時(shí)候如果方法沒(méi)有加Transactional注解或者類沒(méi)有被Spring管理就會(huì)出現(xiàn)事務(wù)失效的情況。報(bào)修工單創(chuàng)建、日志插入、通知寫入這三個(gè)操作如果不在一個(gè)事務(wù)里日志插入失敗時(shí)工單已經(jīng)提交了數(shù)據(jù)就亂了。排查事務(wù)失效有個(gè)技巧加Transactional的方法不能是private的不能被this調(diào)用還要把異常拋出到事務(wù)邊界之外否則異常被捕獲了事務(wù)不會(huì)回滾。我實(shí)際開發(fā)時(shí)有一次工單創(chuàng)建成功后報(bào)錯(cuò)檢查發(fā)現(xiàn)日志插入方法沒(méi)有加Transactional導(dǎo)致創(chuàng)建和日志不一致加上注解并在Service入口統(tǒng)一管理事務(wù)后就好了。這個(gè)經(jīng)驗(yàn)值得記下來(lái)很多反復(fù)出現(xiàn)的“靈異bug”其實(shí)都是事務(wù)邊界的問(wèn)題。7. 常用調(diào)試技巧與個(gè)人體會(huì)最后分享幾個(gè)自己總結(jié)的調(diào)試技巧和心得。第一日志要善用但不濫用。開發(fā)時(shí)MyBatis-Plus控制臺(tái)輸出SQL日志可以看到每次執(zhí)行的完整SQL排查問(wèn)題直接看日志不要靠猜。線上部署時(shí)把日志級(jí)別調(diào)成INFO避免刷屏影響性能。第二前后端聯(lián)調(diào)時(shí)先抓包看請(qǐng)求和響應(yīng)體很多問(wèn)題一看就是參數(shù)名不對(duì)或缺失字段不用急著改代碼。第三接口測(cè)試用Postman或Apifox把常用的接口做成集合改完代碼跑一遍回歸測(cè)試比手工點(diǎn)前端頁(yè)面高效很多。我個(gè)人在實(shí)際開發(fā)后最深的感受是這類多角色系統(tǒng)的難點(diǎn)不在CRUD而在業(yè)務(wù)的完整性和數(shù)據(jù)的準(zhǔn)確性。狀態(tài)流轉(zhuǎn)約束、權(quán)限校驗(yàn)、事務(wù)邊界、字段設(shè)計(jì)的規(guī)范性這些才是真正拉開代碼質(zhì)量差距的地方。另外給正在做畢業(yè)論文/畢設(shè)的同學(xué)一個(gè)建議不要只滿足于“能跑”把狀態(tài)機(jī)設(shè)計(jì)、權(quán)限方案、文件存儲(chǔ)方案、事務(wù)控制這幾個(gè)點(diǎn)講明白答辯的時(shí)候這就是亮點(diǎn)。這個(gè)系統(tǒng)后續(xù)如果要擴(kuò)展方向也挺明確的一是把微信小程序端補(bǔ)上學(xué)生更習(xí)慣用手機(jī)報(bào)修二是增加工單超時(shí)提醒用定時(shí)任務(wù)掃描超時(shí)未接單的工單自動(dòng)提醒管理員三是數(shù)據(jù)統(tǒng)計(jì)做可視化大屏按樓棟、按類型展示維修頻次和平均響應(yīng)時(shí)長(zhǎng)后勤部門會(huì)很需要。我這邊也打算把小程序端和定時(shí)提醒做出來(lái)后面攢夠經(jīng)驗(yàn)再寫一篇分享。如果你正在調(diào)這個(gè)項(xiàng)目遇到問(wèn)題歡迎把報(bào)錯(cuò)信息發(fā)在交流區(qū)我看到都會(huì)回復(fù)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲无码一区成人免费午夜| 另类一区| 91欧美丝袜| 啊好大好舒服| AV色天香在线| 久久久久9999妇女| 日本三级人妻a人妻一在线| 91 刺激在线| 无套内射性感少妇视频| 91久热| 亚洲色久| 欧美亚洲国产自久久| 中文字幕版| 大屁股国产在线视频| 超碰97欧美日韩| 人妻少妇久久| 另类欧美色| 亚洲精品免费中文字幕| 欧美福利视频啊啊啊啊| 日韩欧美国产一区二区三区四区| 99自拍视频在线观看| 天天欧美色| 久久成人午夜狠狠| 国产一进一出视频网站| 啊啊啊啊好多水| 欧美综合自拍亚洲综合图| 九九九国产精品| 国色综合天| 亚洲第一二区另类图| 欧美色偷偷| 国产精品青青草| 最新AV在线| 91一起操| 国产一区二区三区不卡手机在线| 噜噜噜亚洲精品| 超碰97最新人妻| 大香蕉中文201| 久久激情五月| 志村玲子视频一区二区| 日韩去日本高清在| 亚洲AV无码秘 蜜桃臀国精产品| 日本影视久久免费| 手机午夜电影神马久久| 水野优香在线观看| 久久久久久人| 亚洲aV性爱| 色妇91| 国产9 9在线 | 亚洲| 嗯~啊~快点 死我视频| 亚洲欧美不卡线| 青青草丝袜在线视频| 久偷拍欧美日韩三区| 国产对白刺激视频| 狠狠做深爱婷婷久久二区| 午夜福利无毒不卡| 男人天堂最新手机版在线青青草| 乱欲一区二区| 欧美超碰人妻97| 91在线视频观看国产| 亚洲熟妇综合久久久久久| 日本一级性爱| 日日躁夜夜躁狠狠躁超爽| 色色综合网站| 日韩免费一级性爱视频| 91久久久老司机| 九九无码视频| 操屄日韩| 欧日韩一二三f区| 亚洲熟妇极品| 男人的天堂2018东京热啪啪啪| 韩日精品四区| 91精品国产91久久青草| 狠狠躁AV| 国产福利精品最新在线| 欧美一区二区三熟女剧情| 久久超碰免费的| 精品久久久久久亚洲| 日本精品999| 日日爱99| 亚洲国产熟妇综合色专区| 欧美人人曰人人操人人射射| 色妇91| 91成人国产综合久久精品蜜月| 大香蕉99热| 九九九久久久久| 天天综合网站| 人人操,操人人| 东北少妇高潮zzzz| 久久日韩肥臀| 物业黑人 AV一区| 成年男人的天堂| 日韩一级片| 加勒比久久综合网高清| 免费的黄片有限公司| 老熟女综合| 欧亚日韩中文在线| 加勒比综合在线| 青青草原成人| 91在线一起| 本道在线| 久久9精品网站| 久久禁| 久9久9久9久9久9久9| 夜夜爽夜夜摸夜夜操免费视频| 五月天色电影| 91AV天美在线视频| 久久女女| 东京热男人的天堂| 欧美人人操人人插| 操操吧亚洲乱伦视频| 色婷婷六月丁香七月婷婷| 翔田千里无码中出中文字幕| 色欲蜜臀AV| 国产三级日产三级韩国三级| av一区二区三区四区五区久草臀| 精品人妻视频一区二区三区蜜桃视频| 国产欧美成人精品| 久久久久久久久久精| 思思热在线视频免费| 日韩一级特黄av毛片| 动漫片子网站3黄| 啊啊啊啊啊啊在线| 天天干2区3区| 日日日啊啊啊| 天综合中文| 精品人妻av在线播放| 91激情国产| 欧洲亚洲人人爽爽视频| 屌妞视频久久久久久久久久久久| laoshunv91| 33044男人的天堂深夜备| 亚洲男人天堂2017| 成人麻豆av电影网站| 亚洲高清在线| 麻豆福利视频导航| 青青草色AV| 在线国产福利网址导航| 五月婷婷丁香六月| 国模91| 屁股久久久久久| 牛牛aV| 日日干男人的天堂| 91啪啪| 黄污污污污| 久草久日| 美女操逼福利视频| 老熟女中文字幕高清| 少妇久久久久久| 人妻天堂综合网| 久久r精品| 在线观看综合精品亚洲| 啊啊啊在线看| 日本色色色| 深喉吞精| 久久久工口| 国产97在线视频| 天综合网| 欧美色图片91| 综合第一页| 欧美一区二区男人天堂| 成人网站 免费观看| 激情图片伦理国产一区二区日韩| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 26UUU欧美激情一区二区| 亚洲性爱免费电影| 福利一级版子| 亚洲乱色熟女一区| 日本在线不卡123| 日韩人人精品| 免费视频无码| 久久精品 六十路 熟女 欧美| 九九性视频| 欧美色亚洲| 精品小视频在线| 日韩性爱网址| 国产在线观看一区二区三区| 另类av综合久久| 国产又大又硬又长又粗| 亚洲女人91| 久久欧洲| 好吊色在线观看| 北约熟女超碰| 91东北熟女| 男人天堂免费| 亚洲人妻久久| 国产97av| 天综合网欧美| 一区| 久久精品视频久久久| 强奸乱伦大香蕉网| 国产黄色在线播放观看| 超碰97伊人| 精品二区三四区五电影| 啊啊啊啊啊啊啊好爽不要| 激情五月天综合网| 国产精品免费视频人成| 国产www色在线观看| 日本孕妇一区二区视频操逼免费看| 性爱边摸边日免费AV| 婷婷色综合| 国产97av| 五月天九九日国产精品一区二区三区| 久草男人天堂| 日本福利二区视频| 欧美日韩少妇色情| 亚洲综合999| 免费观看国产小粉嫩喷水精品午| 黄网色一区二区三区四区精品| 大香蕉啪啪啪| dy888午夜老子影视达达兔| 一区二区不卡免费| 中文字幕人乱码中文字的预防方法 | 欧美 亚洲 综合 制服 另类| 日韩精品9999| 日韩中文字幕av在线播放| 久久国产精品91| 青青草日本无码| 日韩久久三区| 亚洲骚女一区二区三区| 乱久久久| 天天影视综合色| 日韩精品啪啪啪| 99少妇| 亚欧成人一级片在线播放| 欧美劲爆第一页| 最近二区三区视频大全| a片久久久久久久久久久久 | 99热精品免费| 久久熟女人| 青青草视频爽一爽| 天天综合网1| 色哟哟av网址| 亚洲欧美洲综合| 亚洲在线91| 无码不卡亚洲成?人片| 国产成年女人免费视频播放a| 色哟哟综合| 无码WWW免费视频网站| 在线观看av区| 自拍二页| 97免费视频在线| 一起草三级AV电影在线观看| 综合自拍| 中文字幕在线观看AV| 国产精品网站免费| 欧美激情精品| 美女午夜福利免费视频| 99久久com免费视频′| 神马久久久久久久久久久久| 丝袜视频网国产90| 国产粉嫩蜜臀av一区二区三区| 老司机天天操| 大奶啊啊好爽| 超碰在97| 国产日韩精品suv| 黄片免费看黄片免费看| 97日视频| 亚欧高清| 色噜噜狠狠色综无码久久合欧美| 欧美se亚洲| 婷婷久久久精品| 亚洲一区二区三区在线激情| a久久| 金典av| 97亚洲中文| 无色无码| 欧美 牲| 97综合国产| 亚洲中文一区二区三区视频| 99re只有精品| 欧美综合亚洲综合| 97色婷婷| 青草精品视频日本久久久久网站在线| 入口操逼网站| 色偷偷色偷偷欧美日韩| 国产又粗又大硬免费色网视频| 麻豆国产免费影片| 97精品全部| 国产亚洲日韩在线三区黑人| 亚洲s在线观看| 天天cao在线| 成视频在线观看免费看| 欧美激情一| 国产精品毛片?v一区二区三区 | 免费成人在线熟妇网| 亚洲日韩美女丝袜美腿人妻视频| 久久AV无码网址| 美女主播色欲91抠b在线播放| 天天92av| 九色 人妻 大香蕉| 国产 日韩,欧美 自拍| 亚洲成人免费电影| 超碰社区97| 思思热在线cao| 欧洲一区二区三区免费| 日韩性爱1级片视频| 少妇人妻无码| 日韩成人精品| 2017大香蕉国产精品久久| 99亚洲精品| 啊啊啊好湿久久| 亚洲国产精品成人综合| 加勒比综合九九99视频在线播放| 国产探花日韩援交| 久久 亚洲 日韩 人妻| 中国AV美女| 91欧美性| 亚洲欧洲网站免费观看| 黑人性欧美| 日本 欧美 亚中文字幕| 97超碰欧美| 亚洲色性情三级| 色色网91| 女上位精品在线| 色色婷婷五月天| 少妇蹲下露出大唇5| 日韩高潮一区| 亚洲国产一级黄色视频| 九9热伊人| 青草av在线| 人人妻人人爽一区二区三区| 亚洲人在线| 欧美精品一区二区少妇免费A片| 国产精品色哟哟| 欧美经典一区二区三区| 久久精品超碰| 亚州色国| 日韩人体偷拍| 99热这里只有精品地址| 爱爱啊啊啊| 东北女人| www.婷婷五月天| 亚洲黄色视频在线观看视频| 97综合久第一页| 亚洲夜色在线| 精品亚洲国产成人av网站| 欧美高清91| 黄色小说亚洲| 五月丁香色情| 精品国产91av一区二区三区| 青青草公开在线免费不卡视频| 第四色色综合91| 黄色视频特级毛片| 国产精品日本无码A片| 亚洲人人夜夜澡人人爽| 色噜噜国产在线| 日本高清一区二区在线| 久久性生大片免费观看性| 风骚少妇视频中文字幕| 97综合在线观看| 国产成人无码高清| 欧美性爱18观看| 99热精品在线观看| 男人的天堂日本东京热| 99re69综合| 超碰AV在线| 免费一级特黄特色大片在线观看看 | 国产精品人人爽人人做可爱福利| 我想要 啊 啊 啊| 中字一区| 久草男人天堂| 情色五月天久久久| 日韩av熟女一区二区三区成人| 国产久久久久久久久一区二区| 成人无遮挡毛片免费看| 在线播放免费av福利片| 人人摸人人入| 国产高清自拍| 中文字幕一二三| 这里都是精品| 91日韩网站| 久久偷偷色综合蜜桃| 国产日韩人人| 91在线色| 亚洲欧美国产中文字幕| 中文字幕-区二区三区四区视频中国| 大香蕉操久久| 少妇99成人麻豆| 亚州情色j区| 夜夜爽33333| 久久,精品一二三| 久超碰在| 久久综合中文国产| 国产有码一区| 蜜桃不卡一区二区| 欧洲自拍色图gif在线| 日韩传媒在线| 日韩无码AB| 精品美女少妇一区二区三区| 91熟女.com| 蜜臀无码一区二区| 国产日本顶级一区二区三区| 啊啊啊啊好多水| 国产97亚洲| 国产在线视频午夜精华在| 3PAV乱伦视频| 两性色网| 九九AV| 日本在线不卡123| 亚州成人a∨| 台湾肥佬网一区二区三区| 91网亚洲| 久久久91福利姬| 亚洲在线观看| 97天天综合| 亚洲精品自拍| 色官网在线| 色色无码| 久久夜夜夜| 婷婷九月丁香| 亚洲中文字幕在线视频一区二区 | 男女91| 亚洲日韩东京热一区| 国产成人啪一区二区| 欲香欲色综合天天伊人| 影音先锋少妇| 人人扣人人操| 最新精品久久蜜桃| 青青草一区二区高清无码视频 | 天美一二三在线观看Av| 亚洲文学偷乱拍啪啪啪啪| 亚洲高清色综合| 午夜男女爽爽大片免费观看| 69精品久久久久中文字幕| 亚洲av在线免费观看| 亚洲欧洲精品成人| 欧美色交| 性色生活片久久毛片婬片免费放女人一级毛片| 99精品热| 吊色| 手机在线免费看的av| 色牛牛AV| 超碰综合色| 97色亚洲| 日本污ww视频网站| 精品国产国产AV| 久久少妇| 久久婷五月天| 欧美中字不卡| 极品欧美一区二区三区| 婷婷久久综合| 日韩青久久| 影音先锋日本一区二区| 97色伦欧美| 美女天天干| 国产h片在线观看视频| 天天操女人| 99精品九九九九九九| 日韩精品一区二区日韩| 麻豆九九九| 国产精品自拍视频| www五月| 999九九九九国产动| 一级人妻性爱视频| 97蜜桃综合| 91天天综合日韩欧美| 熟女字幕| 操逼短片| 黄色性爱网网| 精品人妻视频一区二区在线播放 | 亚欧精品久久久久久久久久久| 中文字幕精品亚洲熟女| 国产精品麻豆视频网站| 色天堂在线观看| AV一区观看| 欧美色图下一页| 狠狠操官网| 用力操死我| 翔田千里无码一区| 国模不卡一本二本三电影| 国产精品美女久久久久久网站| 精品国产乱码久久久久久久久1| 99热欧美| 99热色这里只有精品| 夜色综合| 一及黄久一点| 欧美视频一区二区在线| 日韩综合第八区国产精品| 一区二区三区机械有限公司| 日韩欧美传媒一区国产| 久久久噜噜噜久久久| 97色网| 福利风月五月天影院| 91肉片| 伊人久久大香线综合无码| 精品人妻中文字幕4399| 久久久久久久久久久久欧美日| 国产亚洲日韩在线三区黑人| 老鸭窝在线视频播放| 久99热| 99久久精品国产系列| 三上制服丝AV| 日韩欧美字幕亚洲一区二区| 成人三级片一区二区三区视频| 亚殴在线| 户外裸露刺激视频第一区| 久久伊人东京热| 伊色综合天堂色97| 亚洲av综合色区无码一| 欧美精品激情| 97大色网| 97碰在线视频| 激情黄色片在线观看| 欧美少妇高潮久久91| 色99视频| 激情 欧美 亚洲 小说| 日本黄色XXX| 久久极品一区二区| 日韩国产在线观看av| 精品人妻一区二区三区四区| 九九热五区| 日韩中文字幕二区| 八戒午夜福利理论片| 青青草原av| 久久精品一区| 色婷婷电影| 亚洲另类小说卡通动漫| 欧美精品一二三| 夜草欧美| 久久人妻四季| 色九月婷婷| 综合久久久久久久综合网| 91天堂| 后入式五六区| 久久久久七视频| 久久国产视频性吧| 国产网站在线播放| 97视频网站| 婷婷五月天色网| 美女露胸露屁股| 国产精品网站www| 啪啪啪综合| av日韩国产一区二区| 亚春色色| 国产欧美另类久久久精品课程| 久久久久久久久久久精| 强奸乱伦资源| 99超级碰免费视频| 精品人妻一二三四区视频| 人妻少妇精品一区二区三区| 天天视频黄网站| 亚洲天堂在线怕怕视频| 欧美在线天堂| 97色欧洲| 成人草草视频| 成人夜夜| AV男人天堂网| 亚洲青青草| 久久久专区| 五月天伊人| 亚洲AV无码天美传媒一区| 一区二区三区机械有限公司| 在线无码操| 人人妻人射| 免费一级精品啪啪视频| 天天狠操| 国产精品毛片?v一区二区三区| 婷婷丁香激情| 国产精品白丝在线播放| 八戒午夜福利理论片| 日韩无码极品| 日本性感人妻91| 亚洲日韩人妻中文字幕一区| 加勒比海色香蕉婷婷| 91色插| 美日韩男女操屄视频| 熟妇熟女亚洲天堂网| 九九AV| 男人的天堂网免费| 亚洲天堂色图| 97在线欧洲| 欧美成人一区二区| 玖玖爱伊人玖玖爱| 久久久无码精品人妻二区| 男人天堂导航| 中文字幕乱亚洲美女精品一区| 亚洲国产成人综合碰碰三级经典| 日韩欧美亚洲自拍偷拍| 久久精品国产97欧美精品亚洲| 午夜福利在线视频1000| 欧美瑟综合| 国产真实野战在线视频| 日韩av色图| 亚洲无码久久久久久久| 中文无线日韩一区| 97ai亚洲| 欧美一级久久久久久久大片动画| 国产成人无码a| 久久‘黄片视频| 色九月| 成人老鸭窝人人在线视频| 亚洲日韩熟女人妻高清在线| 超碰在线综合97| 91亚洲网| 最近2019中文字幕国语免费版 | 粉嫩av一区二区三区天美传媒| 欧美色图亚洲色| 国产精品嫩草影院午夜两性| 图片区小说区| 偷拍亚洲高清图片| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 51一区二区三区| 99免费在线视频| 密臀视频一区二区三区| 深夜视频| 国产亲戚伦亲在线| 91在线综合网| 精品人妻15区| 亚洲最新av无码成人精品区 | 欧美劲爆第一页| 一区二区三区黄色片a| 色婷婷在线视频| 亚洲精品一卡二卡三卡福利视频网站| 久久精品28| 国产区性爱在线视频秋霞豆| 超碰97资源大奶| 日本一级真人黄色性爱视频| 久久9免费视频| 成全动漫视频观看免费下载| 久久女婷| av草草在线电影| 久久国产熟女影院| 77777亚洲蜜臀精品久久综合蜜臀| 999熟女精品| AV在线性爱| 日韩在线女优天天干| 18精品一二区| 久久亚洲AV无码专区国产精品| 射丝袜高跟鞋99| 色图四区| 日韩久久三区| 91中文字幕制服丝袜免费视频| 在线观看色视频| 60秒免费小视频| 中文字幕丰满人妻日本| 校园春色综合| 精品人妻一区二区三区在线视频不卡| 99久久99九九99九九九| 熟女熟妇一区二区三区视频| 激情综合二| 欧美成人国产精品| 蜜乳AV网址| 日韩不卡一二三四| 久久久精品无码亚免费| 锕锕好爽 死我在线观看| 久久首页| 啊啊啊啊啊啊啊在线| 国产精品一级特黄aaa大片在线观看 | 欧美在线视频播放| 亚洲最新中文字幕免费| 伊人少妇久久久| 亚洲第一成人影院色播| 97精品一区| 毛片电影一区二区三区| 日日躁夜夜躁狠狠躁超爽| 99精品久久| 天美传媒婬乱在| 国产欧美日韩女同性恋ww喷水精品| 日日摸天天爽夜夜欢| 97精品一二区| 精品人妻1区| 偷拍五区| 婷婷啪啪| 另类图片欧美激情综合| 97一区二区三区视频| 国产熟女乱论| 91 偷| 肉丝网站91| 久久riav中文精品| 青青草AV色| 日韩偷拍色图| 国产成人无码啪| 精品久操| 蜜色网色哟哟| 欧美图片偷拍| 九九精品99| 久久久久久久久9| 久草久热| 囯产操逼片| 日韩一级二级三级在线不卡观看完整| 亚洲精品国产AV天美传媒| 亚洲精品第一| 久久大| 青青草久草AV| 美中韩AV综合网| 中文字幕丝袜国产第一页不卡| 96一区二区三区| 五月婷婷hd| 乱色视频中文字幕| 久久精品国产亚洲妲己影视| 精品人妻视频一区二区在线播放| 久久发布国产伦子伦精品| 国产91啪| 美女诱惑一区| 九九热午夜欧亚国产视频| 又大又白奶子| 人人操人人操草草| 国产1024在线播放| 啊啊啊 在线| 国产亚洲色婷婷99精品91| 玖玖在线视频| 日韩一性一交一A片俄罗斯| 夫妻天天操岛国视频| 超碰97在线中文| 久久久久久亚洲精品中文字幕人妻| 美國A片| 乱伦一二三| 少妇无码999| 亚洲国产中文字幕| 伊人丝袜美腿高跟在线观看高清| 婷婷月色| 欧美黄片视频在线观看免费 | 色伊人91| 日本性交操一区二区不卡系列| 日本亚欧爱爱| 天天影视激情欧美| 大香蕉性欧美| 2025亚洲男人天堂| 久久ww| 先锋色眉乱伦资源| 日本东京热久久久电影| 国产人伦a片信息免费片| 久久熟妇五十路一区| 9 9精品一区二区三区| 成年人一级黄色毛片大全在线观看| 婷婷伊人五月| 永久免费观看的毛片的网站| 好爽视频在线观看| 熟妇人妻精品一区二区| 久艹视频在线| 国产精品毛片| 人人九九精| 日韩精品一区,二区 九九...老司机| 中出789在线视频| 九九九久千久久激情蜜桃在线看 | 婷婷五月天无码| 黄色高清久久无码依人| 色性荡荡荡荡视频| 99热色这里只有精品| 91熟女熟妇视频网站| 亚洲天堂,男人| 一区二区 韩日AV| 久久久无码国精品无码三区三区| 精品久热| 国产亚洲人妻综合日韩 久久| 六月丁香啪啪| 大香蕉色十月| 精品人妻一区二区免费蜜桃| 安徽熟妇视频| 欧美 亚洲 综合 制服 另类| 999熟女精品| 亚洲丝袜二区在线| 91n欧美| V A在线| 超清福利精品视频在线| 亚洲h片在线免费观看| 九九热超碰| wwwss在线观看| 台湾佬激情综合| 青草香蕉网| 蜜乳av一区二区三区| 亚洲,欧美,综合网| 天天肏天天干| 欧美国产精品| 欧美在线观看综合国产| www.99热| 99www.bibizy香蕉资源国产一区二区三区高清| 性老妇一区二区三区| 久湿久久| 九九九九9999| 欧美黑人精品在线播放| a在线观看| 密臀在线免费观看| 国产精品3| 亚洲精品久久久久久久蜜桃臀| 黑人嘿嘿嘿超爽免费视频| 激情文学小说一区二区| 亚洲a色| A级在线视频| 八人操人人摸人人看| 99爱在线视频| 60秒免费小视频| 加勒比海人人操超碰在线| 天天日天天干天天色| 亚洲强奸乱伦影视网| 怡红院视频在线| 精品久久艹| 女人精品内射国产99| 亚洲天堂人妻熟妇视频| 97超碰国产亚洲精品资源| 香蕉免费一区二区三区不读| 欧美加勒比| www黄片免费看com| 一区=区三区视频| 91精品91久久久久77777| 操国产逼| 丁香五月天堂网| 亚州熟妇精品| 福利视频香蕉免费一区二区在线| 新版天堂中文资源8在线| 丝袜综合| 久久久久国产精品久久久| 午夜福利视频在线一区| 精品国产91久久久久久一区黄无| 久久精品区| 日本性爱不卡视频| 操逼精品视频| 久久狠狠色噜噜狠狠狠狠97| 大香蕉五月天婷婷| 丝袜高跟澳门91视频| 亚洲无码超碰免费| 啊啊啊啊啊啊在线看| av2014 日韩在线中文字幕| 精品少妇人妻av久久免费| 97视频在线免费看| 国产白丝AV| 五月天色图| 超碰在线在公开超碰在线在公开| 欧美黄色片在线播放| 亚洲男人天堂网久久| 91高潮| 95人妻爽爽人人做人人澡| 亚洲交换| 国产成人bd在线观看| 第一高清av中文字幕| 国语人妻精彩刺激| 日韩精品一区二区三区四虎影视| 亚洲超碰综合网| 亚洲h片在线免费观看| 日韩一级二级在线| 国产高清成人免费视频| 亚洲男人天堂Av| 蜜臀久久99精品久久久久久| 久久久一区二区三区四曲免费听| 97人人夜| 中文字幕一区av| 啊啊啊啊啊啊啊啊在线观看| 亚洲天堂电影精品一区| 亚州综合在线| 精品视频123区小说区| 翔田千里AV无码秘 三区| 亚洲图片欧美91N| 97欧美在线| 淫色网综合| 亚洲av国产av综合av卡| m欧洲一级午老| 丝袜剧情| 丝袜美腿91| 日本福利社| 成人线上超碰| 青青草伊人久久| 国产成人亚洲精品无码古代早漏男| 欧美天堂亚洲电影院一区在线播放| 欧美精品99久久久**| 四虎免费视频| A久久| 思思热国产高清| 欧美韩国你懂得在线| 最新中文字幕在线亚洲| 视频二区美腿制服人妻欧美| 天天日B狠狠操| 国产一区二区免费福利片| 性性久久| 91久热| 日韩有码 一区二区三区| 日欧毛片久久| 综合一区中亚洲国产成人综合精品 | 加勒比少妇AV婷婷六月天超碰超碰| 香蕉人人操tv| 亚洲色狠| 欧美亚洲激情一二三| 99热自拍| 免费自拍三级综合| 欧美综合综合| 国产精品91ai| 色播综合| 国产又黄又粗的视频| 亚洲人精品久久久| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 啊啊啊好爽快点啊啊啊嗯嗯| 五十路六十路素人熟女| 蜜桃传媒视频第一区入口在线看| 久久久久久久久久久久久9999| 做爱A级亚欧| 国产精品剧情| Aa东京男人的天堂| 亚洲情色五月天| 在线观看国产黄色| 国产精品久久久久久亚洲色欲| 97资源站久久| 老熟女区| 欧美日韩性感| 日本精品不卡一二三区| 亚洲中文字幕精品一区| 九九久久国产精品怡红院| 日韩AV色图| 婷婷五月天社区| 强奸乱伦Av网| 黄片qw| 91中文字幕| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美 亚洲 大香| 日韩人妻少妇 一区二区三区| 日韩图区 偷拍| 99久久精品国产系列| 精品无码少妇| 欧洲一区二区三区四区在线观看| 色天使大香蕉| 东北夫妻性偷拍| 99热综合| 色官网在线| 欧美日韩一区二区三区四区蜜桃| 精品蜜乳AV免费观看| 久久久久久久9999| 视频在线97| 狠狠爱AV| 国产一区二区三区,在线观看观看| www四虎| 丁香五月天社区| 国产成人无码网站在线视频| 亚洲国产一级精品毛一级精品看免费视频| 日韩成人性日韩成人性爱视频在线免费观看 | 97中文综合| 久久九操在线观看| 乱久久久| av线电影| 欧美亚洲厕所精品偷拍91 | 人人操人人爽人人操人人| 久热最新在线杭州| 天天干夜夜鈤| 夜夜高潮夜夜爽夜夜爱爱一区| 久久97超碰香蕉| 日欧美色| 久久99国产综合精品女同| 欧美综合区| 小情侣高清国产在线视频| 国产AV激情无码久久无码| 午夜无遮挡男女啪啪视频| 亚洲国产成人精品999| 精品视频在线观看精品| 无码国产精品96久久久久孕妇| 男同专区一区二区三区在线| 成人无码欧美一级A片狼牙直播| 色与欲影视天天看综合网| 久久精品无码熟妇一区二区三区视频导航 | 青娱乐亚洲热| 欧美日韩淫加| 日本大香蕉| 亚洲色图 图片| 一区二区三区在线日韩影院观看| 久久九九精品一区二区| 亚洲天天天| 黑人综合网| 国产在线综合网| AA级电影三区| 久久成人午夜精品影院| 天天精品| 丁香六月婷婷久久综合| 欧美三级一级| 欧美78| 午夜美女诱惑电源网| 校园春色 欧美| 伊人操你| 国产精品无码论坛| 丁香五月偷拍| 亚洲91色在线| 九七人妻在线| 亚洲人妻精品一区二区| 亚洲成a人v欧美综合天堂下载| 久久精品国内Av熟女高清| 国产亚洲中文不卡二区| 99热超碰| 欧美精品偷拍| 97在线播放| 污色区网站| 美国日韩黄色片| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 中文欧丝袜诱惑| 性91| 黄色电影观看久久9| 丁香激情五月| 欧美91精彩| 天天综合中文字幕 91| 中文字幕国产| 日本在线一二| 亚洲成人妻日韩在线| 亚洲精品国语在线播放| 黄色av片三级三级三级免费看| 最新加勒比丝袜在线| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 60秒免费小视频| 91欧美色| 中国大陆国产高清AⅤ毛片| 中文字幕高清20页视频| 免费看国产大AB| 成人性爱免费播放| 久热伊人| 偷拍片久久| 亚洲欧洲av影音| 东京热免费视频| 加勒比av官网在线| 欧美爱三级日韩久久| 久久久一区二区三区四曲免费听| 色悠久久久av| 国产精品盗摄 偷窥盗摄| 一区二区三区在线资源| 丝袜视频网国产90| 综合久久久久久久综合网| 九久9热| 天天色欧美| 91啪啪视频| 怡红院亚洲怡春院av| 久操网无码在线| 综合日韩激情另类图片| 欧美中文字幕精品人妻| 五月香婷婷| 天天性射网| 强奸乱伦日韩AV| 国产成人精品午夜福利| 91深夜夜| 绑缚麻绳人妻寝取完整版| 黄色视频高清无码网站| 成年女人一区| 亚洲欧美黄| 久久草草欧美精品| 自拍六区| 天天操综合网| 欧美精品黑人猛交高潮| 婷婷伊人綜合中文字幕| 日日躁天天躁狠狠躁| 亚洲精品国产精品乱码不99| 加勒比性爱成人在线| aaaa少妇高潮大片| 99热国产精品| 亚洲第一在线视频| 天天色综合影视网| 亚洲AV免费在线| 亚洲男人天堂手机版| 99热久| 夜夜嗨视频| 99999无码| 十八禁视频一区二区| 亚洲第一色页夜| 乱伦a片视频| 亚洲图片 激情小说| 黄色小视频日本txt| 亚洲脚交| 伊人久久88国产女| 午夜小电影在线插入淫高潮| 91美乳| 五十路三级片| 蜜臀在线网站| renqi久久久久久久久久久久| 97色97干| 色五月天AV| 亚洲精品亚洲人成在线麻豆| 久区视频| 淫色网综合| 亚洲免费在线探花| 夜夜精品视频一区二区| 日韩三级一区| 亚洲国产成人精品999| 久久女同性恋一二区| 99热只有这里有精品| 亚洲熟妇A V黑人| 91殴美大片| 日本人人操人人操| 后入式免费视频| 亚洲视频小说| 综合久久婷婷| 中文字幕高清精品一区| 无码操逼天堂| 亚洲 综合 欧美| 国产日韩精品人妻久久久久色欲网站| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 国产女人成人精品视频| 熟女探花啪啪| 中文熟女五十乱码在线| 国产 日韩 欧美 人妻 熟女 中文 69人妻精品一区二区绯色 | 肏逼福利网站| 超碰在线1234区| 国产不卡片| 国产精品岛国片在线观看| 日本不卡五区| 老鸭窝日丰县女人| 丰满少妇一区二区三区四区观看| 操迟操逼在巾线Fre看| 97久久国产精品女不卡| 99黄页网站| 久久国产三区| 欧美熟女操屄| 欧美人与动性人交a| 97精品一区| 久久久久9999妇女| 精品超碰中文在线| 97欧美性爱| 久久久久久亚洲Av无码精| 狠久久| 日日摸日日碰| 亚洲AV乱码专区国产噜噜亚洲| 91精品伊人久久久大香线蕉91| 久久久久久99AV无码免费网站| 伊人性在线视频| 色婷婷淫色网| 国产精品久久久久久夜夜夜| 精品婷婷| 欧美日韩国产高清在线一二三区 | 久久国产成人精品国产成人亚洲| 综合性视频99| 男插女青青影院| 黑操B| 99精品网| 日韩中文字幕二区| 青娱乐国产精品| 国产传媒午夜理伦精品| 中文久久久| 一本色道久久综合精品婷婷| 日本免费一区二区不卡 | 欧美日韩国产高清在线一二三区| a级免费在线观看| 好爽视频在线观看| 久久婷婷苹果| 黄久久| 欧美色图在线视频少妇| 国产精品熟女九九九| 国产日韩精品一区二区三区| 嗯啊不要在线| 人人摸人人干| 色五月婷婷在线| 婷婷精品| 久热免费视频| 99热精品在线在线| 九九综合久久| 激情av| 五月天色综合| 婷婷五月天成人网| 长长久久88视频| 中文字幕人妻丝袜| 成人综合色网| 大香蕉操久久| 亚州操操穴网| 嗯~啊~快点 死我视频| 欧美日韩人人精品| 久久久久久性爱视频| 亚洲棕合电彰| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 日本久久999| 美女91色黄18| 青青草影视蜜久久| 亚洲色婷婷综合久久久久中文| 黄色交缠性感爆操91国产精品免费一区二区三区 | 99热日| 亚洲图片91| 欧美日韩狠狠爱| 91九色丨风韵犹存| 亲子敌伦对白在线播放| 欧美不卡五十路| 亚洲伊人a线观看视频| 干干干天天| 国产农村一一级特黄毛片|