1. 新增批量替換項目名&包名&前綴的Shells腳本(支持Linux&Mac)
2. 錄製了完整的項目講解視頻教程
3. 優化代碼若干 & 刪除無用代碼和注釋掉的代碼若干 & 完善代碼注釋若干
4. 優化整個項目所有的枚舉類型(刪除枚舉類型上標記的@JsonFormat(shape = JsonFormat.Shape.OBJECT) )
6. 廢棄zuihou-scan-stater模塊
7. 修復通用簡訊驗證碼發送的bug
8. 修復zuihou-admin-ui上傳租戶頭像報錯和無法修改頭像成功的bug
10.廢棄SystemApi模塊
11.依賴升級
spring.boot.version -> 2.2.7.RELEASE
mybatis.version -> 3.5.4
mybatis-spring.version -> 2.0.4
mybatisplus.version -> 3.3.2
p6spy.version -> 3.9.0
fastjson.version -> 1.2.72 (修復安全漏洞)
druid.version -> 1.1.22 (修復編譯時,IDEA的警告)
knife4j.version -> 2.0.4
swagger.version -> 1.5.22
hutool.version -> 5.3.9
jjwt.version -> 0.11.1
1. 修改 InjectionFieldPo 和 InjectionField 類的 feign 欄位為 apiClass,使得欄位命名更加合理
2. InjectionField註解類新增dictType屬性,解決字典類型數據注入bug
3. 修復自動注入器注入字典類型的數據時,無法區分不同字典類型的值
1. 修復表單統一驗證模塊不支持Restful風格 + BaseController接口的驗證規則獲取bug
2. com.github.zuihou.validator.config.EnableFormValidator 註解移動到 com.github.zuihou.validator.annotation.EnableFormValidator
1. 優化SCHEMA模式全局攔截器代碼功能和可讀性
2. 優化非DATASOURCE模式數據源配置
3. 優化分頁插件每次查詢最大500條的限制
4. PageParams類的 getPage() 方法修改成 buildPage(),並支持多欄位排序
5. 刪除 MultiTenantInterceptor ,新增 ReplaceSql
6. 新增MasterDatabaseConfiguration, 優化NONE、SCHEMA、COLUMN模式的數據源配置和事務配置
7. 修復NONE、SCHEMA、COLUMN模式事務失效的bug
1. 新增JsonUtil工具類(jackson)
1. 優化枚舉欄位反序列化全局配置類:EnumDeserializer, 提高可讀性和性能
2. 新增枚舉類型欄位的全局序列化配置類:EnumSerializer, 實現了BaseEnum接口的枚舉按照規範序列化
3. 優化 BaseConfig 類中全局的 ObjectMapper 配置
3. 優化LocalDateTime類型參數的Jackson反序列化規則
4. 優化LocalDateTime、Date、LocalDate、LocalTime等日期類型表單參數傳遞時的轉換規則
5. 全局統一異常的狀態碼修改為400
6. 優化PageController類handlerWrapper方法的邏輯
1. 優化服務遠程調用時,請求頭和線程變量的傳遞
2. 新增全局的支持負載均衡策略、請求頭和LocalThread參數傳遞的LbRestTemplate
3. 新增全局的熔斷回調, @FeignClient 註解無需單獨配置 fallback 和 fallbackFactory 即可實現回調
1. 使得通過 zuihou.swaggger.enabled 可以全局禁用swagger功能
2. 優化SwaggerProperties類的配置和默認值
1. 為了減少zuihou-log-starter模塊體積,將ip2region.db移動到oauth服務。
2. 修復操作日誌根據參數控制是否記錄請求參數的bug
1. 修復分布式定時執行器運行重置任務時,找不到sql腳本的bug
1. 優化代碼生成器配置若干
2. 修復代碼生成器生成的代碼導包不正確和缺少配置的bug
3,修復代碼生成器生成配置類和Controller類錯誤的bug
4,優化代碼生成器使得生成代碼時,可以使用模糊查詢同時生成多張表
5,完善代碼生成後的提示信息
6, 支持生成租戶數據源動態新增消息隊列監聽類
租戶模式 | 描述 | 優點 | 缺點 | 分布式事務 |
NONE(非租戶模式) | 沒有租戶 | 簡單、適合獨立系統 | 缺少租戶系統的便利性 | 支持 |
COLUMN(欄位模式) | 租戶共用一個資料庫,在業務表中增加欄位來區分 | 簡單、不複雜、開發無感知 | 數據隔離性差、安全性差、數據備份和恢復困難 | 支持 |
SCHEMA(獨立schema) | 每個租戶獨立一個 資料庫(schema),執行sql時,動態在表名前增加schema | 簡單、開發無感知、數據隔離性好 | 配置文件中必須配置資料庫的root帳號、不支持複雜sql和 sql嵌套自定義函數 | 存在bug |
DATASOURCE(獨立數據源) | 每個租戶獨立一個 資料庫(數據源),執行代碼時,動態切換數據源 | 可獨立部署資料庫,數據隔離性好、擴展性高、故障影響小 | 相對複雜、開發需要注意切換數據源時的事務問題、需要較多的資料庫 | 支持 |
基於`SpringCloud(Hoxton.SR3)` + `SpringBoot(2.2.7.RELEASE)` 的 SaaS型單體架構腳手架,具備用戶管理、資源權限管理、網關統一鑑權、Xss防跨站攻擊、自動代碼生成、多存儲系統、分布式事務、分布式定時任務等多個模塊,支持多業務系統並行開發,支持多服務並行開發,可以作為後端服務的開發腳手架。代碼簡潔,架構清晰,非常適合學習使用。核心技術採用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Seata、Nacos、Sentinel、RabbitMQ、FastDFS等主要框架和中間件。
希望能努力打造一套從 SaaS基礎框架 - 微服務架構 - 自動化部署 - 系統監測 的解決方案。本項目旨在實現基礎能力,不涉及具體業務。
服務鑑權:
通過JWT的方式來加強服務之間調度的權限驗證,保證內部服務的安全性。
監控:
利用Spring Boot Admin 來監控各個獨立Service的運行狀態;利用turbine來實時查看接口的運行狀態和調用頻率;通過Zipkin來查看各個服務之間的調用鏈等。
數據權限:
利用基於Mybatis的DataScopeInterceptor攔截器實現了簡單的數據權限
SaaS的無感解決方案:
使用Mybatis攔截器實現對所有SQL的攔截,COLUMN模式動態拼接租戶編碼,SCHEMA模式修改默認的Schema,DATASOURCE模式動態切換數據源,從而實現多租戶數據隔離的目的。並且支持禁用租戶模式。
二級緩存:
採用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進行了功能增強。(如:指定時間發送任務、執行器和調度器合併項目、多數據源)
大文件/斷點/分片續傳:
前端採用webupload.js、後端採用NIO實現了大文件斷點分片續傳,啟動Eureka、Zuul、File服務後,直接打開docs/chunkUploadDemo/demo.html即可進行測試。 經測試,本地限制堆棧最大內存128M啟動File服務,5分鐘內能成功上傳4.6G+的大文件,正式服耗時則會受到用戶帶寬和伺服器帶寬的影響,時間比較長。
分布式事務:
集成了阿里的分布式事務中間件:seata,以 高效 並且對業務 0侵入 的方式,解決 微服務 場景下面臨的分布式事務問題。
灰度發布:
為了解決頻繁的服務更新上線,版本回退,快速迭代,公司內部協同開發,本項目採用修改ribbon的負載均衡策略來實現來灰度發布。
關聯數據自動注入:
用於解決跨表、跨庫、跨服務分頁數據的屬性或單個對象的屬性 回顯關聯數據之痛, 支持對靜態數據屬性(數據字典)、動態主鍵數據進行自動注入。
項目 | 演示地址 | 管理員帳號 | 普通帳號 |
租戶後臺 | http://tangyh.top:10000/zuihou-ui | zuihou/zuihou | test/zuiou |
開發&運營後臺 | http://tangyh.top:180/zuihou-admin-ui | demoAdmin/zuihou | 無 |