《燈燈》中后臺快速開發平臺
燈燈(lamp)項目名字由來
在一個夜黑風高的晚上,小孩吵著要出去玩,于是和程序員老婆
一起帶小孩出去放風,路上順便討論起項目要換個什么名字,在各自想出的名字都被對方一一否決后,大家陷入了沉思。
走著走著,在一盞路燈下,孩砸盯著路燈打破寧靜,喊出:燈燈~ 我和媳婦愣了一下,然后對視著一起說:哈哈,這個名字好~
lamp 項目組成
注意: 請先下載lamp-util 代碼并編譯(mvn install) 到本地倉庫,然后在編譯(mvn install)lamp-cloud或lamp-boot項目, 最后編譯(mvn install)lamp-job項目!!!
工具集
項目 | gitee | github | 備注 |
---|---|---|---|
lamp-util | lamp-util | lamp-util | 核心工具集 |
lamp-generator | lamp-generator | lamp-generator | 代碼生成器 |
lamp-job | lamp-job | lamp-job | 分布式定時調度器 |
后端
項目 | gitee | github | 備注 |
---|---|---|---|
lamp-cloud | lamp-cloud | lamp-cloud | SpringCloud(微服務)版 |
lamp-boot | lamp-boot | lamp-boot | SpringBoot(單體)版 |
微服務版示例 | lamp-samples | lamp-samples | 常用示例 |
前端
項目 | gitee | github | 備注 | 演示地址 |
---|---|---|---|---|
lamp-web | lamp-web | lamp-web | 基于 vue-admin-element (element-ui) | http://tangyh.top/lamp-web |
lamp-web-plus(強烈推薦!??????) | lamp-web-plus | lamp-web-plus | 基于 vue-vben-admin (vue 3 + ant design vue 2) | http://tangyh.top |
lamp-cloud 簡介
lamp-cloud
是 lamp
項目的其中一員。她基于 jdk11/jdk8
+ SpringCloud
+ SpringBoot
的微服務快速開發平臺,同時也是一個SaaS項目開發平臺。
它具備RBAC、網關統一鑒權、Xss防跨站攻擊、代碼自動生成、多種存儲系統、分布式事務、分布式定時任務等功能,支持多業務系統、多服務并行開發,可以作為Java Web項目的開發腳手架。代碼優美,注釋齊全,架構清晰,非常適合學習和企業作為基礎框架使用。
核心技術采用Spring Cloud Alibaba、SpringBoot、Mybatis、Seata、Sentinel、RabbitMQ、FastDFS/MinIO、SkyWalking等主要框架和中間件。
希望能努力打造一套從 JavaWeb基礎框架
- 分布式微服務架構
- 持續集成
- 系統監測
的解決方案。本項目旨在實現基礎能力,不涉及具體業務。
分支介紹
- master 分支為最新的穩定版本,每次提交都會升級一個版本號
- dev 分支為作者的開發分支,作者開發的最新功能會實時提交上來,喜歡嘗鮮的可以切換為dev。 但可能有報錯、漏提等,對項目不是很熟的朋友千萬別嘗試。
- tag 每個固定的版本都會打一個tag方便后續切換任意版本。
lamp 租戶模式介紹
本項目可以通過配置,輕松切換項目的 租戶模式。
租戶模式 | 描述 | 優點 | 缺點 |
---|---|---|---|
NONE(非租戶模式) | 沒有租戶 | 簡單、適合獨立系統 | 缺少租戶系統的優點 |
COLUMN(字段模式) | 租戶共用一個數據庫,在業務表中增加字段來區分 | 簡單、不復雜、開發無感知 | 數據隔離性差、安全性差、數據備份和恢復困難、 |
SCHEMA(獨立schema) | 每個租戶獨立一個 數據庫(schema),執行sql時,動態在表名前增加schema | 簡單、開發無感知、數據隔離性好 | 配置文件中必須配置數據庫的root賬號、不支持復雜sql和 sql嵌套自定義函數 |
DATASOURCE(獨立數據源) | 每個租戶獨立一個 數據庫(數據源),執行代碼時,動態切換數據源 | 可獨立部署數據庫,數據隔離性好、擴展性高、故障影響小 | 相對復雜、開發需要注意切換數據源時的事務問題、需要較多的數據庫 |
DATASOURCE_COLUMN(獨立數據源+字段模式) | 每個租戶獨立一個 數據庫(數據源),執行代碼時,動態切換數據源,在動態拼接 子租戶id 二次隔離 | 可獨立部署數據庫,數據隔離性好、擴展性高、故障影響小、支持大租戶小門店形式 | 相對復雜、開發需要注意切換數據源時的事務問題、需要較多的數據庫 |
體驗地址
- 官網:https://tangyh.top
- 4.x 企業版體驗地址: https://pro.tangyh.top
- 3.x 企業版體驗地址。演示地址: https://boot.tangyh.top
- 3.x 開源版體驗地址。演示地址: https://boot.tangyh.top/lamp-web
lamp-cloud 項目亮點功能介紹:
服務注冊&發現與調用:
基于Nacos來實現的服務注冊與發現,使用使用Feign來實現服務互調, 可以做到使用HTTP請求遠程調用時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。
負載均衡:
將服務保留的rest進行代理和網關控制,除了平常經常使用的node.js、nginx外,Spring Cloud系列的gateway 和 loadbalancer 可以幫我們進行正常的網關管控和負載均衡。
RBAC:
通過JWT生成token,存儲用戶基本信息,并自研權限配置、鑒權方案。
熔斷機制:
因為采取了服務的分布,為了避免服務之間的調用“雪崩”,采用了Sentinel的作為熔斷器,避免了服務之間的“雪崩”。
監控:
利用Spring Boot Admin 來監控各個獨立服務的運行狀態、健康情況。
鏈路調用監控:
同時實現了SkyWalking作為本項目的全鏈路性能監控, 從整體維度到局部維度展示各項指標,將跨應用的所有調用鏈性能信息集中展現,可方便度量整體和局部性能,并且方便找到故障產生的源頭,生產上可極大縮短故障排除時間。
數據權限
利用基于Mybatis的DataScopeInnerInterceptor攔截器實現了數據權限功能
SaaS(多租戶)的無感解決方案
本項目支持3種常見的租戶解決方案和無租戶方案,同一套代碼,修改一個配置即可實現租戶模式只有切換。
緩存抽象
采用CacheOps操作緩存,內置2種實現:Caffeine、 Redis,可以讓項目應急時在無Redis環境正常運行
優雅的Bean轉換
采用Dozer、BeanUtil等組件來對 DTO、DO、PO等對象的優化轉換
前后端統一表單驗證
嚴謹的表單驗證通常需要 前端+后端同時驗證, 但傳統的項目,均只能前后端各做一次檢驗, 后期規則變更,又得前后端同時修改。
故在hibernate-validator
的基礎上封裝了lamp-validator-starter
起步依賴,提供一個通用接口,可以獲取需要校驗表單的規則,然后前端使用后端返回的規則,
以后若規則改變,只需要后端修改即可。防跨站腳本攻擊(XSS)
- 通過過濾器對所有請求中的 表單參數 進行過濾
- 通過Json反序列化器實現對所有 application/json 類型的參數 進行過濾
當前登錄用戶信息注入器
- 通過注解實現用戶身份注入
在線API
由于原生swagger-ui某些功能支持不夠友好,故采用了國內開源的
knife4j
,并制作了stater,方便springboot用戶使用。代碼生成器
基于Mybatis-plus-generator自定義了一套代碼生成器, 通過配置數據庫字段的注釋,自動生成枚舉類、數據字典注解、SaveDTO、UpdateDTO、表單驗證規則注解、Swagger注解等。
定時任務調度器:
基于xxl-jobs進行了功能增強。(如:指定時間發送任務、執行器和調度器合并項目、多數據源)
分布式事務
集成了阿里的分布式事務中間件:seata,以 高效 并且對業務 0侵入 的方式,解決 微服務 場景下面臨的分布式事務問題。
跨表、跨庫、跨服務的關聯數據自動回顯
用于解決跨表、跨庫、跨服務分頁數據的屬性或單個對象的屬性 回顯關聯數據之痛, 支持對靜態數據屬性(數據字典)、動態主鍵數據進行自動回顯。
灰度發布
為了解決頻繁的服務更新上線,版本回退,快速迭代,公司內部協同開發,本項目采用修改 loadbalancer 的負載均衡策略來實現來灰度發布。
lamp-cloud 技術棧/版本介紹:
- 所涉及的相關的技術有:
- JSON序列化:Jackson
- 消息隊列:RabbitMQ
- 緩存:Redis
- 數據庫: MySQL 5.7.9 或者 MySQL 8
- 定時器:采用xxl-jobs項目進行二次改造
- 前端:vue2 + element-ui / vue3 + ant design vue
- 持久層框架: Mybatis-plus
- 代碼生成器:基于Mybatis-plus-generator自定義
- API網關:Gateway
- 服務注冊&發現和配置中心: Nacos
- 服務消費:OpenFeign
- 負載均衡:Ribbon
- 服務熔斷:Sentinel
- 項目構建:Maven
- 分布式事務: seata
- 分布式系統的流量防衛兵: Sentinel
- 監控: spring-boot-admin
- 鏈路調用跟蹤: SkyWalking
- 文件服務器:FastDFS 5.0.5/阿里云OSS/本地存儲/MinIO
- Nginx
- 部署方面:
- 服務器:CentOS
- Jenkins
- Docker
- Kubernetes
項目截圖:
預覽 | 預覽 |
---|---|
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
交流群。加群前請先給項目點個 "Star",謝謝!??
- 63202894
- 1011148503
遇到問題請先查看歷史issue,未找到解決方案,在提交issue(問題描述詳細一些,報錯截圖大一些,復現步驟全一些)
https://github.com/zuihou/lamp-cloud/issues