《燈燈》中后臺快速開發平臺

Language License Author Version
Star Fork Star Fork

燈燈(lamp)項目名字由來

在一個夜黑風高的晚上,小孩吵著要出去玩,于是和程序員老婆一起帶小孩出去放風,路上順便討論起項目要換個什么名字,在各自想出的名字都被對方一一否決后,大家陷入了沉思。
走著走著,在一盞路燈下,孩砸盯著路燈打破寧靜,喊出:燈燈~ 我和媳婦愣了一下,然后對視著一起說:哈哈,這個名字好~

lamp 項目組成

注意: 請先下載lamp-util 代碼并編譯(mvn install) 到本地倉庫,然后在編譯(mvn install)lamp-cloud或lamp-boot項目, 最后編譯(mvn install)lamp-job項目!!!

工具集

項目giteegithub備注
lamp-utillamp-utillamp-util核心工具集
lamp-generatorlamp-generatorlamp-generator代碼生成器
lamp-joblamp-joblamp-job分布式定時調度器

后端

項目giteegithub備注
lamp-cloudlamp-cloudlamp-cloudSpringCloud(微服務)版
lamp-bootlamp-bootlamp-bootSpringBoot(單體)版
微服務版示例lamp-sampleslamp-samples常用示例

前端

項目giteegithub備注演示地址
lamp-weblamp-weblamp-web基于 vue-admin-element (element-ui)http://tangyh.top/lamp-web
lamp-web-plus(強烈推薦!??????)lamp-web-pluslamp-web-plus基于 vue-vben-admin (vue 3 + ant design vue 2)http://tangyh.top

lamp-cloud 簡介

lamp-cloudlamp項目的其中一員。她基于 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 二次隔離可獨立部署數據庫,數據隔離性好、擴展性高、故障影響小、支持大租戶小門店形式相對復雜、開發需要注意切換數據源時的事務問題、需要較多的數據庫

體驗地址

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進行了功能增強。(如:指定時間發送任務、執行器和調度器合并項目、多數據源)

  17. 分布式事務

    集成了阿里的分布式事務中間件:seata,以 高效 并且對業務 0侵入 的方式,解決 微服務 場景下面臨的分布式事務問題。

  18. 跨表、跨庫、跨服務的關聯數據自動回顯

    用于解決跨表、跨庫、跨服務分頁數據的屬性或單個對象的屬性 回顯關聯數據之痛, 支持對靜態數據屬性(數據字典)、動態主鍵數據進行自動回顯。

  19. 灰度發布

    為了解決頻繁的服務更新上線,版本回退,快速迭代,公司內部協同開發,本項目采用修改 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