# 《燈燈》中后臺快速開發平臺
[](https://github.com/zuihou/lamp-cloud) [](https://github.com/zuihou/lamp-cloud/blob/master/LICENSE) [](https://github.com/zuihou) [](https://github.com/zuihou/lamp-cloud)
[](https://github.com/zuihou/lamp-cloud/stargazers) [](https://github.com/zuihou/lamp-cloud/network/members) [](https://gitee.com/zuihou111/lamp-cloud/stargazers) [](https://gitee.com/zuihou111/lamp-cloud/members)
*****
# 注意
**本文檔是lamp-cloud項目3.x版本的文檔,4.x文檔請閱讀:https://tangyh.top/doc/%E7%AE%80%E4%BB%8B.html**
**3.x源碼已經不在更新,目前持續更新4.x版本**
*****
# 燈燈(lamp)項目名字由來
在一個夜黑風高的晚上,小孩吵著要出去玩,于是和`程序員老婆`一起帶小孩出去放風,路上順便討論起項目要換個什么名字,在各自想出的名字都被對方一一否決后,大家陷入了沉思。
走著走著,在一盞路燈下,孩砸盯著路燈打破寧靜,喊出:燈燈~ 我和媳婦愣了一下,然后對視著一起說:哈哈,這個名字好~
## lamp 項目組成
注意: 請先下載lamp-util 代碼并編譯(mvn install) 到本地倉庫,然后在編譯(mvn install)lamp-cloud或lamp-boot項目, 最后編譯(mvn install)lamp-job項目!!!
## 工具集
| 項目 | gitee | github | 備注 |
| --- | --- | --- | --- |
| lamp-util | [lamp-util](https://gitee.com/zuihou111/lamp-util) | [lamp-util](https://github.com/zuihou/lamp-util) | 核心工具集 |
| lamp-generator | [lamp-generator](https://gitee.com/zuihou111/lamp-generator) | [lamp-generator](https://github.com/zuihou/lamp-generator) | 代碼生成器 |
| lamp-job | [lamp-job](https://gitee.com/zuihou111/lamp-job) | [lamp-job](https://github.com/zuihou/lamp-job) | 分布式定時調度器 |
## 后端
| 項目 | gitee | github | 備注 |
| --- | --- | --- | --- |
| lamp-cloud | [lamp-cloud](https://gitee.com/zuihou111/lamp-cloud) | [lamp-cloud](https://github.com/zuihou/lamp-cloud) | SpringCloud(微服務)版 |
| lamp-boot | [lamp-boot](https://gitee.com/zuihou111/lamp-boot) | [lamp-boot](https://github.com/zuihou/lamp-boot) | SpringBoot(單體)版 |
| 微服務版示例 | [lamp-samples](https://gitee.com/zuihou111/lamp-samples) | [lamp-samples](https://github.com/zuihou/lamp-samples) | 常用示例 |
## 前端
| 項目 | gitee | github | 備注 | 演示地址 |
| --- | --- | --- | --- | --- |
| lamp-web | [lamp-web](https://gitee.com/zuihou111/lamp-web) | [lamp-web](https://github.com/zuihou/lamp-web) | 基于 vue-admin-element (element-ui) | http://tangyh.top/lamp-web |
| lamp-web-plus(強烈推薦!??????) | [lamp-web-plus](https://gitee.com/zuihou111/lamp-web-plus) | [lamp-web-plus](https://github.com/zuihou/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基礎框架` - `分布式微服務架構` - `持續集成` - `系統監測` 的解決方案。`本項目旨在實現基礎能力,不涉及具體業務。`
## 分支介紹
1. master 分支為最新的穩定版本,每次提交都會升級一個版本號
2. dev 分支為作者的開發分支,作者開發的最新功能會實時提交上來,喜歡嘗鮮的可以切換為dev。 但可能有報錯、漏提等,對項目不是很熟的朋友千萬別嘗試。
3. 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 項目亮點功能介紹:
1. **服務注冊&發現與調用:**
基于Nacos來實現的服務注冊與發現,使用使用Feign來實現服務互調, 可以做到使用HTTP請求遠程調用時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。
2. **負載均衡:**
將服務保留的rest進行代理和網關控制,除了平常經常使用的node.js、nginx外,Spring Cloud系列的gateway 和 loadbalancer 可以幫我們進行正常的網關管控和負載均衡。
3. **RBAC:**
通過JWT生成token,存儲用戶基本信息,并自研權限配置、鑒權方案。
4. **熔斷機制:**
因為采取了服務的分布,為了避免服務之間的調用“雪崩”,采用了Sentinel的作為熔斷器,避免了服務之間的“雪崩”。
5. **監控:**
利用Spring Boot Admin 來監控各個獨立服務的運行狀態、健康情況。
6. **鏈路調用監控:**
同時實現了SkyWalking作為本項目的全鏈路性能監控, 從整體維度到局部維度展示各項指標,將跨應用的所有調用鏈性能信息集中展現,可方便度量整體和局部性能,并且方便找到故障產生的源頭,生產上可極大縮短故障排除時間。
7. **數據權限**
利用基于Mybatis的DataScopeInnerInterceptor攔截器實現了數據權限功能
8. **SaaS(多租戶)的無感解決方案**
本項目支持3種常見的租戶解決方案和無租戶方案,同一套代碼,修改一個配置即可實現租戶模式只有切換。
9. **緩存抽象**
采用CacheOps操作緩存,內置2種實現:Caffeine、 Redis,可以讓項目應急時在無Redis環境正常運行
10. **優雅的Bean轉換**
采用Dozer、BeanUtil等組件來對 DTO、DO、PO等對象的優化轉換
11. **前后端統一表單驗證**
嚴謹的表單驗證通常需要 前端+后端同時驗證, 但傳統的項目,均只能前后端各做一次檢驗, 后期規則變更,又得前后端同時修改。
故在`hibernate-validator`的基礎上封裝了`lamp-validator-starter`起步依賴,提供一個通用接口,可以獲取需要校驗表單的規則,然后前端使用后端返回的規則,
以后若規則改變,只需要后端修改即可。
12. **防跨站腳本攻擊(XSS)**
- 通過過濾器對所有請求中的 表單參數 進行過濾
- 通過Json反序列化器實現對所有 application/json 類型的參數 進行過濾
13. **當前登錄用戶信息注入器**
- 通過注解實現用戶身份注入
14. **在線API**
由于原生swagger-ui某些功能支持不夠友好,故采用了國內開源的`knife4j`,并制作了stater,方便springboot用戶使用。
15. **代碼生成器**
基于Mybatis-plus-generator自定義了一套代碼生成器, 通過配置數據庫字段的注釋,自動生成枚舉類、數據字典注解、SaveDTO、UpdateDTO、表單驗證規則注解、Swagger注解等。
16. **定時任務調度器**:
基于xxl-jobs進行了功能增強。(如:指定時間發送任務、執行器和調度器合并項目、多數據源)
18. **分布式事務**
集成了阿里的分布式事務中間件:seata,以 **高效** 并且對業務 **0侵入** 的方式,解決 微服務 場景下面臨的分布式事務問題。
19. **跨表、跨庫、跨服務的關聯數據自動回顯**
用于解決跨表、跨庫、跨服務分頁數據的屬性或單個對象的屬性 回顯關聯數據之痛, 支持對靜態數據屬性(數據字典)、動態主鍵數據進行自動回顯。
20. **灰度發布**
為了解決頻繁的服務更新上線,版本回退,快速迭代,公司內部協同開發,本項目采用修改 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
- 簡介
- 會員版
- 3.x和4.x的區別
- 新手必讀
- 如何高效提問
- 項目地址
- 項目截圖
- 架構介紹
- 開發規范
- 租戶模式介紹
- lamp-web和lamp-web-plus的區別
- lamp-cloud和lamp-boot區別
- 免費視頻&軟件下載
- 文檔反饋
- lamp-cloud
- 服務介紹
- 環境要求
- 工程導入
- nacos啟動(單機版)
- nacos啟動(集群版)
- 將配置文件導入Nacos
- seata啟動(單機版)
- DATASOURCE模式啟動(會員版)
- SCHEMA模式啟動
- COLUMN模式
- NONE模式
- lamp-web啟動
- lamp-web生產部署
- lamp-web-plus啟動(會員版)
- lamp-web-plus生產部署
- lamp-boot
- 環境要求
- 工程導入
- DATASOURCE模式啟動(會員版)
- SCHEMA模式啟動
- COLUMN模式啟動
- NONE模式啟動
- lamp-web啟動
- lamp-web生產部署
- lamp-web-plus啟動(會員版)
- lamp-web-plus生產部署
- 功能介紹
- 租戶設置
- 數據源配置(會員版)
- 租戶管理
- 超級用戶
- 工作臺
- 通知公告
- 組織管理
- 機構管理
- 崗位管理
- 用戶管理
- 資源中心
- 消息中心
- 短息模版
- 短信中心
- 附件管理
- 流程管理
- 流程部署
- 模型管理
- 系統設置
- 菜單管理
- 角色管理
- 字典管理
- 地區管理
- 參數管理
- 操作日志
- 登錄日志
- 在線用戶
- 應用管理
- 網關管理
- 限流規則
- 組織訪問
- 開發者管理
- 定時任務
- 接口文檔
- Nacos
- 服務監控
- 數據庫監控
- 緩存監控
- zipkin監控
- SkyWalking監控
- 常用配置
- 如何保證我的代碼能更新到最新代碼
- 序列化和反序列化
- 修改日志級別
- 文件上傳&下載&預覽
- 修改租戶模式
- 分頁
- 導入導出
- 請求放行(忽略token&忽略URI權限&忽略租戶編碼)
- 異常處理
- 全局返回
- 參數校驗(會員版)
- 系統日志
- 自研權限認證(URI、按鈕、菜單)
- 數據權限(舊)
- 數據庫配置
- Mybatis配置
- 更多數據庫/數據源/Mybaits配置
- Redis(緩存)配置
- RabbitMq配置
- 灰度發布
- 上手開發
- 表結構整理
- 項目結構&依賴&調用流程介紹
- 生成一個新服務
- 生成后端代碼
- 生成前端lamp-web代碼
- 生成前端項目lamp-web-plus代碼
- 跨域處理
- Swagger文檔調試技巧
- FeignClient接口調用
- 多租戶實現原理
- 分布式事務
- Zipkin配置(過時)
- SkyWalking配置
- 代碼生成器和自動回顯組件使用介紹
- lamp-util原理解析
- 全局注解(lamp-annotation)
- 核心包(lamp-core)
- 自動回顯(lamp-echo-starter)
- 權限控制(lamp-security-starter)
- 當前登錄用戶信息(lamp-jwt-starter)
- 緩存(lamp-cache-starter)
- SpringBoot全局配置(lamp-boot-util)
- SpringCloud全局配置(lamp-cloud-starter)
- 數據源&持久層配置(lamp-databases)
- 對象屬性復制(lamp-dozer-starter)
- 操作日志(lamp-log-starter)
- 消息隊列(lamp-mq-starter)
- 在線文檔(lamp-swagger2-starter)
- 前后端表單統一驗證(lamp-validator-starter)
- 防止Xss攻擊(lamp-xss-starter)
- 生產部署
- 部署前言
- jar部署