10.06 基於SpringBoot2的開源管理後臺系統springboot-plus

一個基於SpringBoot 2 的管理後臺系統,有數十個基於此的商業應用,包含了用戶管理,組織機構管理,角色管理,功能點管理,菜單管理,權限分配,數據權限分配,代碼生成等功能 相比其他開源的後臺開發平臺腳手架,SpringBoot-Plus 使用簡單,可以輕易完成中型,大型系統開發。同時技術棧較為簡單

基於SpringBoot2的開源管理後臺系統springboot-plus

基於SpringBoot2的開源管理後臺系統springboot-plus

基於SpringBoot2的開源管理後臺系統springboot-plus

基於SpringBoot2的開源管理後臺系統springboot-plus

基於SpringBoot2的開源管理後臺系統springboot-plus

如何判斷一個開源開發平臺適合自己

  • 要明白單體系統,系統拆分,微服務三個不同構建開發平臺方式,plus支持單體和系統拆分,一般而言,後臺管理系統適合單體和系統拆分。微服務並不適合系統管理,以我知道的互聯網大廠,央企後臺管理系統,還是以前倆個為多
  • 你需要的是技術框架還是開發平臺,技術框架就是技術堆砌,開發平臺必須具備一定複雜基礎業務功能
  • 看權限模型,支持功能權限和數據權限。plus具備強大的功能權限和數據權限,且可以擴展n種數據權限
  • 看用戶是否能屬於多個部門,用戶兼職情況很常見
  • 看數據字典是否支持級聯,數據字典級聯太常見了,平臺需要提供數據和前端的支持。puls系統支持
  • 看代碼生成是否支持預覽,為什麼要預覽,因為生成會覆蓋,預覽可以修改已經生成的代碼

Plus系統是一個使用簡單,功能較為複雜的開源系統,已經數十家商業公司採用

系統基於Spring Boot2.1技術,前端採用了Layui2.4。數據庫以MySQL/Oracle/Postgres/SQLServer為實例,理論上是跨數據庫平臺.

1 使用說明

1.1 安裝說明

建議在徹底熟悉plus系統之前,先暫時不要修改其他配置選項,免得系統無法訪問

本系統基於Spring Boot 2 ,因此請務必使用JDK8,且打開編譯選項parameters(點擊瞭解parameters), 並重新編譯工程,如果你沒有使用Java8的 parameters 特性,系統不能正常使用

從Git上獲取代碼後,通過IDE導入此Maven工程,包含倆個子工程

  • admin-core ,核心包,包含了緩存,數據權限,公用的JS和HTML頁面。
  • admin-console, 系統管理功能,包含了用戶,組織機構,角色,權限,數據權限,代碼生成等管理功能

com.ibeetl.admin.CosonleApplication 是系統啟動類,在admin-console包下,在運行這個之前,還需要初始化數據庫,位於doc/starter-mysql.sql,目前只提供mysql, oracle, postgresql腳本。理論上支持所有數據庫

還需要修改SpringBoot配置文件application.properties,修改你的數據庫地址和訪問用戶

spring.datasource.baseDataSource.url=jdbc:mysql://127.0.0.1:3306/starter?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&useInformationSchema=true

spring.datasource.baseDataSource.username=root

spring.datasource.baseDataSource.password=123456

spring.datasource.baseDataSource.driver-class-name=com.mysql.cj.jdbc.Driver

運行CosonleApplication,然後訪問http://127.0.0.1:8080/ 輸入admin/123456 則可以直接登錄進入管理系統

1.2 創建子系統

SpringBoot-plus 是一個適合大系統拆分成小系統的架構,或者是一個微服務系統,因此,如果你需要創建自己的業務系統,比如,一個CMS子系統,建議你不要在SpringBoot-Plus 添加代碼,應該是新建立一個maven工程,依賴admin-core,或者依賴admin-console(如果你有後臺管理需求,通常都有,但不是必須的)

創建子系統,可以進入代碼生成>子系統生成, 輸入maven項目路徑,還有包名,就可以直接生成一個可運行的基於SpringBoot-Plus 的子系統,所有代碼可以在個項目裡些完成,直接運行MainApplication,

@SpringBootApplication @EnableCaching @ComponentScan(basePackages= {"com.corp.xxx","com.ibeetl.admin"}) public class MainApplication extends SpringBootServletInitializer implements WebApplicationInitializer { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } } 

子系統包含了admin-core和admin-console, 因此你可以直接在子系統裡使用core和console提供的所有功能,通過子系統的console功能的代碼生成來完成進一步開發

子系統可以單獨運行和維護,也可以集成到nginx後構成一個龐大的企業應用系統

1.2.1 配置子系統

子系統不需要做任何配置即可在IDE裡直接運行,如果你想打包jar方式運行,則需要添加

<build>

<plugins>

<plugin>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-maven-plugin/<artifactid>

如果你想打包成war放到tomcat下運行,需要修改maven打包為war

<packaging>war/<packaging>

1.2.2 菜單系統

系統默認提供三種類型菜單

  • 系統級菜單,出現在頁面頂部,表示一個子系統
  • 導航菜單,出現在頁面左邊,點擊導航將打開其下所有菜單
  • 菜單,點開菜單將定位到頁面,菜單必須關聯到一個功能點。

建議新建立一個子系統來放置新功能

SpringPlus-Boot 並非以菜單或者按鈕來組織整個系統,而是以功能點來組織整個系統提供的功能。如果要使得菜單生效,你必須要先常見一個功能點並且功能點有一個訪問地址,然後將此菜單關聯到這個功能點

SpringBoot-Plus 先建立功能點是個好習慣,功能點被組織成一顆樹,代表了系統應該提供功能的功能,我們看代碼就會看到,功能點跟菜單,跟權限,和數據權限都有密切關係

1.2.2 添加代碼

可以參考1.3業務代碼生成生成初始化的代碼,業務代碼生成了14個文件,包含前後端所有代碼,可以通過生成來了解代碼習作規範

1.3 業務代碼生成

在介紹如何利用Plus開發系統之前,先介紹代碼生成功能,此功能可以生成前後端代碼總計14個文件,你可以通過預覽功能瞭解如何開發這個系統

代碼生成針對表進行代碼生成,包括JS,JAVA,SQL和HTML,可以通過預覽功能直接預覽。在生成代碼到本地前,有些參數需要修改,否則,代碼生成後顯示的都是英文

  • 顯示字段 : 當此實體顯示在任何地方的時候,能代表此實體的名稱,比如用戶名,組織機構名
  • 變量名:可以自己設定一個較短的名字,此變量名會用於前後端的變量
  • urlBase:你規劃的子系統,最後訪問路徑是urlBase+變量名字
  • system: 存放sql目錄的的名稱

其他修改的地方有

是否包含導入導出,如果選擇,則會生成導入導出的代碼,導入導出模板則需要參考已有功能(比如數據字典)來完成

是否包含附件管理,如果選擇,則業務對象可以關聯一組附件,比如客戶關聯一組附件,或者申請信息關聯一組附件。

字段信息的顯示名字,這個用於前端列表,表單的顯示,應當輸入中文名字

作為搜索,可以勾選幾個搜索條件,系統自動生成一個搜索配置類

如果字段關聯數據字典,那麼設置一個數據字典,這樣,生成的界面將會變成一個下拉列表

1.3.1 前端代碼

前端代碼採用了layui的JS框架,使用了按需加載的方式,文檔參考 http://www.layui.com/doc/base/infrastructure.html.

  • index.js: 系統入口JS,包含了查詢和表格
  • add.js : 新增操作的所有JS
  • edit.js: 編輯操作的所有JS
  • del.js: 刪除操作的所有JS

基礎JS

  • Common.js: 封裝了通常JS功能,如jquery的post方法,layui的窗口方法
  • Lib.js 封裝了業務相關方法,如submitForm,loadOrgPanel等方法

1.3.2 HTML代碼

頁面採用layui,文檔參考 http://www.layui.com/demo/

模板語言了使用Beetl,文檔參考ibeetl.com

  • index.html: 功能首頁
  • add.html: 新增首頁
  • edit.html: 編輯操作首頁

採用layui的好處是自帶了頁面和組件還有JS的管理,能完成大多數業務需求

基礎UI組件:

  • orgInput.tag.html 組織機構輸入框
  • simpleDictSelect.tag.html 字典下拉列表
  • simpleDataSelect.tag 包含key-value的下拉列表
  • searchForm.tag.html 通用搜索表單
  • submitButtons.tag.html 提交按鈕
  • accessButton.tag.html 普通按鈕(含權限)
  • attachment.tag.html 附件管理組件
  • ....

2 單體系統,系統拆分和微服務

plus是一個適合單體系統,系統拆分的java快速開發平臺,也可以經過改造成微服務平臺(以前做一個版本,但覺得plus應該聚焦系統核心,而不是簡單堆砌功能,所以放棄了)

以下是單體系統,小系統,和微服務的區別

單體系統是一種常見系統設計方式,也是這十幾年年來最主要的設計方式。單體系統的所有功能都在一個工程裡,打成一個war包,部署。這樣有如下明顯好處

  • 單體系統開發方式簡單,我們從剛開始學習編程,就是完成的單體系統,開發人員只要集中精力開發當前工程
  • 容易修改,如果需要修改任何功能,都非常方便,只需要修改一個工程範圍的代碼
  • 測試簡單,單體系統測試不需要考慮別的系統,避免本書下冊要提到的各種REST,MQ調用
  • 部署也很容易:不需要考慮跟別的系統關係,直接打war包部署到Web服務器即可
  • 性能容易擴展,可以通過Nginx,把一個應用部署到多個服務器上。

隨著業務發展,重構,單體系統越來越多,在開發一個龐大的單體系統的時候,就會有如下弊病

  • 單體系統龐大,越來越難理解單體系統,微小的改動牽涉面廣泛導致開發小組小心謹慎,開發速度會越來越慢。另外,啟動一個龐大的單體系統,可能需要3分鐘,或者更多時間
  • 多個功能在同一個單體系統上開發,導致測試越來越慢,比如,測試必須排期,串行測試
  • 單體系統如果想對技術進行更新換代,那代價非常大,如果是個小系統構成,則可以選取一個小系統先做嘗試。單體大系統是幾乎不可能做技術升級的
  • 單體系統的所有功能運行在同一個JVM裡,功能會互相影響,比如一個統計上傳word文檔的頁碼的功能由於非常消耗CPU,因此,會因為調用統計功能,導致整個系統短暫都不可用,出現假死的現象

因此,越來越多的架構師在設計系統的時候,會考慮系統拆分成多個單體小系統甚至是微服務。對於傳統企業應用,拆成小系統更合適,對互聯網系統,使用微服務個更合適,這是因為

  • 傳統IT系統本質上還是會用一個數據庫,而微服務提倡的是一個服務一個數據庫
  • 傳統IT系統很少需要調用其他模塊服務。傳統IT系統通過工作流來串聯其他子系統。而電商類的微服務則是通過RPC等方式進行交互,是一個輕量級協議。傳統IT系統也可以通過SOA,JMS跟其他系統(非子系統)交互,採用重量級協議
  • 微服務對系統的基礎設施要求很高,比如微服務治理,彈性庫等等,只要電商系統才有人力物力去做這種事情,而傳統IT系統,及時財大氣粗,也暫時不具備微服務那樣的IT基礎設置

因此,對於大多數傳統IT應用來說,單體拆分小系統在技術上沒有風險,是一個可以立即實施的架構。如下是一個單體系統拆分後的物理架構

對於用戶來說,訪問不同的菜單功能,講定位到不同得子系統,提供服務。


分享到:


相關文章: