項目簡介及系統架構
Jeecg Boot是一款基于Spring Boot的開發平臺,它采用前后端分離架構,集成的框架有Spring Boot 2.x、Spring Cloud、Ant Design of Vue、Mybatis-plus、Shiro和JWT,而且它支持微服務開發。Jeecg Boot還有強大的代碼生成功能,能夠使用代碼生成器一鍵生成前后端代碼,實現項目的快速開發。
Jeecg Boot屬于低代碼開發平臺,可以應用在任何J2EE項目的開發中,尤其適合SaaS項目、企業管理信息系統(MIS)、內部辦公系統(OA)、企業資源計劃系統(ERP)、客戶關系管理系統(CRM)等,它具有半智能手工合并的開發方式,可以提高70%的開發效率或更多,極大地降低了開發成本。
系統功能介紹
Jeecg Boot有成熟的后端模板,也有很高的UI頁面水平,不需要做項目開發的重復性工作。Jeecg Boot還獨創了在線開發模式,包含一系列在線智能開發,如在線配置表單、在線配置報表、在線設計圖表和在線設計流程等。
JEECG團隊的開發宗旨是:簡單的功能由Online Coding配置實現(在線配置表單、在線配置報表、在線設計圖表、在線設計流程和在線設計表單),復雜的功能由代碼生成器生成,并進行手工合并,既能保證智能性又能兼顧靈活。
業務中的流程運轉采用工作流來實現,還能擴展流程任務接口,由開發者實現具體的業務邏輯。表單提供多種解決方案,如表單設計器、Online配置表單和編碼表單,還實現流程與表單的分離設計(松耦合),并支持任務節點的靈活配置,這樣既能保證公司流程的保密性,又能減少開發人員的工作量。Jeecg Boot框架已經具備大量可用的功能,在項目開發時可以直接利用現有功能,而不再需要二次開發。已經具備的功能如下:
├─系統管理
│ ├─用戶管理、角色管理、菜單管理、部門管理
│ ├─權限設置(支持按鈕權限、數據權限)、表單權限(控制字段禁用、隱藏)
│ ├─我的部門(二級管理員)、字典管理、分類字典、系統公告
│ └─職務管理、通訊錄、多租戶管理
├─消息中心
│ ├─消息管理、模板管理
├─代碼生成器(低代碼)
│ ├─代碼生成器功能(一鍵生成前后端代碼,生成后無須修改便可直接用,是后端開發的福
音)
│ ├─代碼生成器模板(提供4套模板,分別支持單表和一對多模型,有不同風格可供選擇)
│ ├─代碼生成器模板(生成代碼,自帶Excel導入和導出功能)
│ ├─查詢過濾器(查詢邏輯無須進行編碼,系統根據頁面配置自動生成)
│ ├─高級查詢器(彈窗自動組合查詢條件)
│ ├─Excel導入和導出工具集成(支持單表,一對多,導入和導出)
│ ├─平臺移動自適應支持
├─系統監控
│ ├─Gateway路由網關、性能掃描監控
│ │ ├─監控 Redis、Tomcat、JVM、服務器信息、請求追蹤、磁盤監控
│ ├─定時任務、系統日志
│ ├─消息中心(支持短信、郵件、微信推送等)
│ ├─數據日志(記錄數據快照,可對比快照查看數據變更情況)
│ ├─系統通知、SQL監控、swagger-UI(在線接口文檔)
│—報表示例
│ ├─曲線圖、餅狀圖、柱狀圖、折線圖、面積圖、雷達圖、儀表圖、進度條、排名列表
│—大屏模板
│ ├─作戰指揮中心大屏、物流服務中心大屏
│—常用示例
│ ├─自定義組件、對象存儲(對接阿里云)、JVXETable示例(各種復雜的ERP布局示例)
│ ├─單表模型示例、一對多模型示例、打印示例、一對多TAB示例
│ └─內嵌table示例、常用選擇組件、異步樹table、接口模擬測試
│ └─表格合計示例、異步樹列表示例、一對多JEditable
│ └─JEditable組件示例、圖片拖拽排序、圖片翻頁、圖片預覽、PDF預覽
│—封裝通用組件
│ ├─行編輯表格JEditableTable、省略顯示組件、時間控件、高級查詢
│ └─用戶選擇組件、報表組件封裝、字典組件、下拉多選組件、選人組件│ └─選部門組件、通過部門選人組件、在線code編輯器、上傳文件組件
│ └─封裝曲線、柱狀圖、餅狀圖、折線圖等報表組件
│ └─驗證碼組件、樹列表組件、表單禁用組件
│—更多頁面模板
│ ├─各種高級表單、各種列表效果、結果頁面、異常頁面、個人頁面
├─高級功能
│ ├─系統編碼規則、單點登錄CAS集成方案
│ ├─提供App發布方案、集成Web Socket消息通知機制
├─積木報表設計器(低代碼)
│ ├─打印設計器、數據報表設計、圖形報表設計(支持ECharts)
│—流程模塊功能(暫不開源)
│ ├─流程設計器、在線表單設計、我的任務、歷史流程
│ └─流程實例管理、流程監聽管理、流程表達式、我發起的流程
│ └─我的抄送、流程委派、抄送、跳轉
更多的功能還在開發中,有興趣的讀者可以關注其進度。
項目開發環境和前后端技術棧
Jeecg Boot的項目開發環境如下:
語言:Java 8;
IDE(Java):基于IDEA或Eclipse安裝Lombok插件;
IDE(前端):WebStorm或IDEA;
依賴管理:Maven;
數據庫:MySQL 5.7、Oracle 11g或SQL Server 2017;
緩存:Redis。
后端使用的技術棧如下:
基礎框架:Spring Boot 2.3.5.RELEASE;
微服務框架:Spring Cloud Alibaba 2.2.3.RELEASE;
持久層框架:Mybatis-plus 3.4.1;
安全框架:Apache Shiro 1.7.0、Jwt 3.11.0;微服務技術棧:Spring Cloud Alibaba、Nacos、Gateway、Sentinel、Skywalking;
數據庫連接池:阿里巴巴Druid 1.1.22;
緩存框架:Redis;
日志打印:Logback;
其他:Fastjson、Poi、Swagger-UI、Quartz、Lombok(簡化代碼)等。
前端使用的技術棧如下:
Vue 2.6.10、Vuex、Vue Router;
Axios;
ant-design-vue;
Webpack、YARN;
vue-cropper——頭像裁剪組件;
@antv/g2——Alipay AntV數據可視化圖表;
Viser-vue——antv/g2封裝實現;
eslint、@vue/cli 3.2.1;
vue-print-nb——打印。
系統結構
Jeecg Boot項目使用Maven作為依賴的管理工具,項目的目錄結構是標準的Maven目錄。其目錄結構如下:
|jeecg-boot
|--->jeecg-boot-base
|------->jeecg-boot-base-api
|----------->jeecg-system-cloud-api
|----------->jeecg-system-local-api
|------->jeecg-boot-base-core
|------->jeecg-boot-base-tools
|--->jeecg-boot-module-demo|--->jeecg-boot-module-system
|--->jeecg-boot-starter
|--->jeecg-boot-module
Jeecg Boot項目的父目錄為jeecg-boot,其中包含有多個模塊,如jeecg-boot-base、jeecg-boot-module-demo、jeecg-boot-module-system、jeecg-boot-starter和jeecg-boot-module。在這些模塊中,jeecg-bootstarter和jeecg-boot-module是微服務必需的項目,jeecg-boot是以SpringBoot為基礎搭建的項目,其他的模塊都以jeecg-boot為父模塊,而jeecg-boot-base下還有子模塊jeecg-boot-base-api、jeecg-boot-basecore和jeecg-boot-base-tools。
系統的功能模塊
本書使用的Jeecg Boot版本號為2.4.5,這是截至本書寫作時Jeecg Boot最新發布的版本。注意,Jeecg Boot 2.4.5版本底層使用的JDK版本和之前的章節使用版本有所不同,它使用的是JDK 1.8,請讀者注意更換。下載最新版的Jeecg Boot 2.4.5并將其導入IDEA中,會自動加載Maven的依賴,加載完成后,項目的目錄如圖8.1所示。
圖8.1 Jeecg Boot的目錄結構
在圖8.1中,項目名稱為jeecg-boot,jeecg-boot是父POM,對子模塊提供項目依賴,當前項目下有3個模塊,分別如下:
jeecg-boot-base為通用模塊,包括工具類、配置、權限、查詢過濾器、注解和接口等;
jeecg-boot-module-demo為項目的案例代碼模塊;
jeecg-boot-module-system為系統管理權限等功能模塊,默認作為啟動項目。jeecg-boot-base項目包括3個項目,分別如下:
jeecg-boot-base-api為API接口項目(又分為云API和本地API項目);
jeecg-boot-base-core為核心項目;
jeecg-boot-base-tools為Jeecg Boot的工具項目。
在后端項目開發中,只需要啟動jeecg-boot-module- system就可以訪問項目的首頁。jeecg-boot-starter為微服務啟動模塊,jeecg-cloud-module為微服務生態模塊,因為本次不涉及微服務,所以最后兩個模塊不用處理。
使用項目根目錄中的docker-compose.yml文件即可在Docker中啟動單一的Jeecg Boot項目,docker-compose- server.yml使用Docker啟動JeecgBoot和Nginx服務器。使用docker-compose.yml可以快速啟動服務,不需要一步一步地搭建依賴的應用。docker-compose.yml文件的內容如下:
version: '2'
services:
jeecg-boot-mysql:
build:
context: ./db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
TZ: Asia/Shanghai
restart: always
container_name: jeecg-boot-mysql
image: jeecg-boot-mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--default-authentication-plugin=caching_sha2_password
ports: - 3306:3306
jeecg-boot-redis:
image: redis:5.0
ports:
- 6379:6379
restart: always
hostname: jeecg-boot-redis
container_name: jeecg-boot-redis
jeecg-boot-system:
build:
context: ./jeecg-boot-module-system
restart: on-failure
depends_on:
- jeecg-boot-mysql
- jeecg-boot-redis
container_name: jeecg-boot-system
image: jeecg-boot-system
hostname: jeecg-boot-system
ports:
- 8080:8080
上述代碼使用的docker-compose.yml版本是2,使用了MySQL服務和Redis服務,最后啟動jeecg-boot-system服務完成項目的啟動。
本項目的數據庫腳本文件為
jeecg-boot/db/jeecgboot-mysql-5.7.sql,需要手動連接MySQL 5.7,再執行SQL腳本。使用不同的MySQL客戶端可能會出現錯誤,請注意修改,以完成SQL腳本的導入。
提示:如果使用了非MySQL數據庫,請注意使用對應的數據庫腳本。
配置文件
項目開發中涉及獨特的配置文件,包括數據庫的配置、Redis的配置和服務器端口的配置等。在Jeecg Boot項目中,配置文件保存在jeecg-boot
module-system/src/main/resources目錄下,開發時使用applicationdev.yml文件。因為本地開發使用的是開發環境,所以需要查看開發環境的配置。
數據庫的配置信息如下:
datasource:
master:
url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-
8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetri
e
val=true&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
Redis的配置如下:
redis:
database: 0
host: 127.0.0.1
lettuce:
pool:
max-active: 8 #最大的數據庫連接數量,設為-1表示沒有限制
max-idle: 8 #最大等待連接的數量,設為0表示沒有限制
#建立連接的最長等待時間,如果超過此時間將出現異常,設為-1表示無限制
max-wait: -1ms
min-idle: 0 #最小等待連接的數量,設為0表示沒有限制
shutdown-timeout: 100ms password: ''
port: 6379
讀者可根據自己的數據庫配置來修改代碼。當前項目使用的日志配置文件是logback- spring.xml,banner.txt為項目啟動的自定義標題圖案。其他的配置文件可以根據自身的需要進行修改,如非必要可以直接啟動項目,而不需要再修改配置。