新增:
1. 新增 SuperService、SuperServiceCacheImpl 類,增加緩存的支持
2. 新增 SuperMapper 類,增加 updateAllById 和 insertBatchSomeColumn 方法
3. 新增 QueryWrap 類,對MP提供的 QueryWrapper 類增強, 並優化 LbqWrapper 類
4. 重寫 SpringCache 的 cacheResolver,使得 註解模式 支持子類 重寫緩存key
5. 新增 首頁右上角顯示我的消息 功能
6. 調整 代碼生成器初始化工程的結構和pom依賴, 生成後端代碼使用最新的 Super* 父類介面, 並且生成的後端代碼支持導入、導出功能
優化:
1. 優化 操作日誌,使得能夠記錄 SuperController 類的日誌,並支持子類 重寫操作日誌描述
2. 優化 父類 BaseController2 重命名為 SupperController, 完善方法:CRUD、導入、導出、Excel預覽、分頁(支持排序、日期區間查詢),完善操作日誌(@SysLog)的支持
3. 調整用戶(c_auth_user)相關類 繼承新增的 Super* 介面,並聯合前端調整介面后,測試通過
4. 優化 WriteInterceptor 寫入許可權攔截器,使之能根據nacos中參數,動態啟用禁用,便於管理員在演示環境臨時修改數據。
修復:
1. 修復 zuihou-ui 消息發送 頁面的bug
2. zuihou-ui 附件列表頁面 滑鼠移到文件名列時正確顯示手形滑鼠
基於`SpringCloud(Hoxton.SR1)` + `SpringBoot(2.2.2.RELEASE)` 的 SaaS型微服務腳手架,具備用戶管理、資源許可權管理、網關統一鑒權、Xss防跨站攻擊、自動代碼生成、多存儲系統、分散式事務、分散式定時任務等多個模塊,支持多業務系統并行開發,支持多服務并行開發,可以作為後端服務的開發腳手架。代碼簡潔,架構清晰,非常適合學習使用。核心技術採用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Seata、Nacos、Sentinel、RabbitMQ、FastDFS等主要框架和中間件。
希望能努力打造一套從 SaaS基礎框架 - 分散式微服務架構 - 自動化部署 - 系統監測 的解決方案。本項目旨在實現基礎能力,不涉及具體業務。
服務註冊與調用:
基於Eureka來實現的服務註冊與調用,在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。
服務鑒權:
通過JWT的方式來加強服務之間調度的許可權驗證,保證內部服務的安全性。
負載均衡:
將服務保留的rest進行代理和網關控制,除了平常經常使用的node.js、nginx外,Spring Cloud系列的zuul和ribbon,可以幫我們進行正常的網關管控和負載均衡。其中擴展和借鑒國外項目的擴展基於JWT的Zuul限流插件,方面進行限流。
熔斷機制:
因為採取了服務的分佈,為了避免服務之間的調用「雪崩」,採用了Hystrix的作為熔斷器,避免了服務之間的「雪崩」。
監控:
利用Spring Boot Admin 來監控各個獨立Service的運行狀態;利用turbine來實時查看介面的運行狀態和調用頻率;通過Zipkin來查看各個服務之間的調用鏈等。
數據許可權:
利用基於Mybatis的DataScopeInterceptor攔截器實現了簡單的數據許可權
SaaS的無感解決方案:
使用Mybatis攔截器實現對所有SQL的攔截,修改默認的Schema,從而實現多租戶數據隔離的目的。
二級緩存:
採用J2Cache操作緩存,第一級緩存使用內存(Caffeine),第二級緩存使用 Redis。 由於大量的緩存讀取會導致 L2 的網路成為整個系統的瓶頸,因此 L1 的目標是降低對 L2 的讀取次數。 該緩存框架主要用於集群環境中。單機也可使用,用於避免應用重啟導致的緩存冷啟動后對後端業務的衝擊。
優雅的Bean轉換:
採用Dozer組件來對 DTO、DO、PO等對象的優化轉換
前後端統一表單驗證:
嚴謹的表單驗證通常需要 前端+後端同時驗證, 但傳統的項目,均只能前後端各做一次檢驗, 後期規則變更,又得前後端同時修改。 故在hibernate-validator的基礎上封裝了zuihou-validator-starter起步依賴,提供一個通用介面,可以獲取需要校驗表單的規則,然後前端使用後端返回的規則, 以後若規則改變,只需要後端修改即可。
防跨站腳本攻擊(XSS):
當前用戶信息注入器:
通過註解實現用戶身份注入
在線API:
由於原生swagger-ui某些功能支持不夠友好,故採用了國內開源的 knife4j ,並製作了stater,方便springboot用戶使用。
代碼生成器:
基於Mybatis-plus-generator自定義了一套代碼生成器, 通過配置資料庫欄位的註釋,自動生成枚舉類、數據字典註解、SaveDTO、UpdateDTO、表單驗證規則註解、Swagger註解等。
定時任務調度器:
基於xxl-jobs進行了功能增強。(如:指定時間發送任務、執行器和調度器合併項目、多數據源)
漢化 Eureka 註冊中心頁面:
請切換分支進行查看
大文件/斷點/分片續傳:
前端採用webupload.js、後端採用NIO實現了大文件斷點分片續傳,啟動Eureka、Zuul、File服務后,直接打開docs/chunkUploadDemo/demo.html即可進行測試。 經測試,本地限制堆棧最大內存128M啟動File服務,5分鐘內能成功上傳4.6G+的大文件,正式服耗時則會受到用戶帶寬和伺服器帶寬的影響,時間比較長。
分散式事務:
集成了阿里的分散式事務中間件:seata,以 高效 並且對業務 0侵入 的方式,解決 微服務 場景下面臨的分散式事務問題。
灰度發布:
為了解決頻繁的服務更新上線,版本回退,快速迭代,公司內部協同開發,本項目採用修改ribbon的負載均衡策略來實現來灰度發布。
關聯數據自動注入:
用於解決跨表、跨庫、跨服務分頁數據的屬性或單個對象的屬性 回顯關聯數據之痛, 支持對靜態數據屬性(數據字典)、動態主鍵數據進行自動注入。
項目 | gitee | github | 備註 |
微服務項目 | https://gitee.com/zuihou111/zuihou-admin-cloud | https://github.com/zuihou/zuihou-admin-cloud | SpringCloud 版本後端代碼 |
單體項目 | https://gitee.com/zuihou111/zuihou-admin-boot | https://github.com/zuihou/zuihou-admin-boot | SpringBoot 版本後端代碼 |
租戶後台 | https://gitee.com/zuihou111/zuihou-ui | https://github.com/zuihou/zuihou-ui | | 給客戶使用的前端 |
開發&運營後台 | https://gitee.com/zuihou111/zuihou-admin-ui | https://github.com/zuihou/zuihou-admin-ui | 給公司內部開發&運營&運維等人員使用 |
代碼生成器 | https://github.com/zuihou/zuihou-generator | 開發人員使用 | |
核心工具包 | https://gitee.com/zuihou111/zuihou-commons | https://github.com/zuihou/zuihou-commons | 核心工具包 |
項目 | 演示地址 | 管理員賬號 | 普通賬號 |
租戶後台 | http://tangyh.top:10000/zuihou-ui | zuihou/zuihou | test/zuiou |
開發&運營後台 | http://tangyh.top:180/zuihou-admin-ui | demoAdmin/zuihou | 無 |
[admin
]