1. 程式人生 > >基於Spring+SpringMVC+Mybatis分散式敏捷開發系統架構zhen專案

基於Spring+SpringMVC+Mybatis分散式敏捷開發系統架構zhen專案

目前看過做完整的專案,大家一起學習一下,詳情請點選原專案連結的地址

前言

  zheng專案創建於2016年10月4日,正在慢慢成長中,目的不僅僅是一個開發架構,而是努力打造一套從 前端模板 - 基礎框架 - 分散式架構 - 開源專案 - 持續整合 - 自動化部署 - 系統監測 - 無縫升級 的全方位J2EE企業級開發解決方案。

專案介紹

  基於Spring+SpringMVC+Mybatis分散式敏捷開發系統架構,提供整套公共微服務服務模組:內容管理、支付中心、使用者管理(包括第三方)、微信平臺、儲存系統、配置中心、日誌分析、任務和通知等,支援服務治理、監控和追蹤,努力為中小型企業打造全方位J2EE企業級開發解決方案。

組織結構

zheng
├── zheng-common -- SSM框架公共模組
├── zheng-admin -- 後臺管理模板
├── zheng-ui -- 前臺thymeleaf模板[埠:1000]
├── zheng-config -- 配置中心[埠:1001]
├── zheng-upms -- 使用者許可權管理系統
|    ├── zheng-upms-common -- upms系統公共模組
|    ├── zheng-upms-dao -- 程式碼生成模組,無需開發
|    ├── zheng-upms-client -- 整合upms依賴包,提供單點認證、授權、統一會話管理
| ├── zheng-upms-rpc-api -- rpc介面包 | ├── zheng-upms-rpc-service -- rpc服務提供者 | └── zheng-upms-server -- 使用者許可權系統及SSO服務端[埠:1111] ├── zheng-cms -- 內容管理系統 | ├── zheng-cms-common -- cms系統公共模組 | ├── zheng-cms-dao -- 程式碼生成模組,無需開發 | ├── zheng-cms-rpc-api -- rpc介面包 | ├── zheng-cms-rpc-service --
rpc服務提供者
| ├── zheng-cms-search -- 搜尋服務[埠:2221] | ├── zheng-cms-admin -- 後臺管理[埠:2222] | ├── zheng-cms-job -- 訊息佇列、任務排程等[埠:2223] | └── zheng-cms-web -- 網站前臺[埠:2224] ├── zheng-pay -- 支付系統 | ├── zheng-pay-common -- pay系統公共模組 | ├── zheng-pay-dao -- 程式碼生成模組,無需開發 | ├── zheng-pay-rpc-api -- rpc介面包 | ├── zheng-pay-rpc-service -- rpc服務提供者 | ├── zheng-pay-sdk -- 開發工具包 | ├── zheng-pay-admin -- 後臺管理[埠:3331] | └── zheng-pay-web -- 演示示例[埠:3332] ├── zheng-ucenter -- 使用者系統(包括第三方登入) | ├── zheng-ucenter-common -- ucenter系統公共模組 | ├── zheng-ucenter-dao -- 程式碼生成模組,無需開發 | ├── zheng-ucenter-rpc-api -- rpc介面包 | ├── zheng-ucenter-rpc-service -- rpc服務提供者 | └── zheng-ucenter-web -- 網站前臺[埠:4441] ├── zheng-wechat -- 微信系統 | ├── zheng-wechat-mp -- 微信公眾號管理系統 | | ├── zheng-wechat-mp-dao -- 程式碼生成模組,無需開發 | | ├── zheng-wechat-mp-service -- 業務邏輯 | | └── zheng-wechat-mp-admin -- 後臺管理[埠:5551] | └── zheng-ucenter-app -- 微信小程式後臺 ├── zheng-api -- API介面匯流排系統 | ├── zheng-api-common -- api系統公共模組 | ├── zheng-api-rpc-api -- rpc介面包 | ├── zheng-api-rpc-service -- rpc服務提供者 | └── zheng-api-server -- api系統服務端[埠:6666] ├── zheng-oss -- 物件儲存系統 | ├── zheng-oss-sdk -- 開發工具包 | ├── zheng-oss-web -- 前臺介面[埠:7771] | └── zheng-oss-admin -- 後臺管理[埠:7772] ├── zheng-shop -- 電子商務系統 ├── zheng-im -- 即時通訊系統 ├── zheng-oa -- 辦公自動化系統 ├── zheng-eoms -- 運維繫統 └── zheng-demo -- 示例模組(包含一些示例程式碼等) ├── zheng-demo-rpc-api -- rpc介面包 ├── zheng-demo-rpc-service -- rpc服務提供者 └── zheng-demo-web -- 演示示例[埠:8888]

技術選型

後端技術:

前端技術:

架構圖

架構圖

模組依賴

模組依賴

模組介紹

zheng-common

Spring+SpringMVC+Mybatis框架整合公共模組,包括公共配置、MybatisGenerator擴充套件外掛、通用BaseService、工具類等。

zheng-admin

基於bootstrap實現的響應式Material Design風格的通用後臺管理系統,zheng專案所有後臺系統都是使用該模組介面作為前端展示。

zheng-ui

各個子系統前臺thymeleaf模板,前端資源模組,使用nginx代理,實現動靜分離。

zheng-upms

本系統是基於RBAC授權和基於使用者授權的細粒度許可權控制通用平臺,並提供單點登入、會話管理和日誌管理。接入的系統可自由定義組織、角色、許可權、資源等。使用者許可權=所擁有角色許可權合集+使用者加許可權-使用者減許可權,優先順序:使用者減許可權>使用者加許可權>角色許可權

zheng-oss

檔案儲存系統,提供四種方案:

  • 阿里雲 OSS
  • 騰訊雲 COS
  • 七牛雲
  • 本地分散式儲存

阿里雲OSS

zheng-api

介面匯流排系統,對外暴露統一規範的介面,包括各個子系統的互動介面、對外開放介面、開發加密介面、介面文件等服務,示例圖:

API閘道器

zheng-cms

內容管理系統:支援多標籤、多類目、強大評論的內容管理,有基本單頁展示,選單管理,系統設定等功能。

zheng-pay

  • 一站式支付解決方案,統一下單介面,支援支付寶、微信、網銀等多種支付方式。不涉及業務的純粹的支付平臺。

  • 統一下單(統一下單介面、統一掃碼)、訂單管理、資料分析、財務報表、商戶管理、渠道管理、對賬系統、系統監控。

統一掃碼支付

zheng-ucenter

通用使用者管理系統, 實現最常用的使用者註冊、登入、資料管理、個人中心、第三方登入等基本需求,支援擴充套件二次開發。

zheng-wechat-mp

微信公眾號管理平臺,除實現官網後臺自動回覆、選單管理、素材管理、使用者管理、訊息群發等基礎功能外,還有二維碼推廣、營銷活動、微網站、會員卡、優惠券等。

zheng-wechat-app

微信小程式後臺

環境搭建(QQ群內有“zheng環境搭建和系統部署文件.doc”)

開發工具:

  • MySql: 資料庫
  • jetty: 開發伺服器
  • Tomcat: 應用伺服器
  • SVN|Git: 版本管理
  • Nginx: 反向代理伺服器
  • Varnish: HTTP加速器
  • IntelliJ IDEA: 開發IDE
  • PowerDesigner: 建模工具
  • Navicat for MySQL: 資料庫客戶端

開發環境:

  • Jdk7+
  • Mysql5.5+
  • Redis
  • Zookeeper
  • ActiveMQ
  • Dubbo-admin
  • Dubbo-monitor

工具安裝

環境搭建和系統部署文件(作者:小兵,QQ群共享提供下載)

資源下載

開發指南:

  • 1、本機安裝Jdk7、Mysql、Redis、Zookeeper、ActiveMQ並啟動相關服務,使用預設配置預設埠即可
  • 2、克隆原始碼到本地並開啟,推薦使用IntelliJ IDEA,本地編譯並安裝到本地maven倉庫

修改本地Host

  • 127.0.0.1 ui.zhangshuzheng.cn

  • 127.0.0.1 upms.zhangshuzheng.cn

  • 127.0.0.1 cms.zhangshuzheng.cn

  • 127.0.0.1 pay.zhangshuzheng.cn

  • 127.0.0.1 ucenter.zhangshuzheng.cn

  • 127.0.0.1 wechat.zhangshuzheng.cn

  • 127.0.0.1 api.zhangshuzheng.cn

  • 127.0.0.1 oss.zhangshuzheng.cn

  • 127.0.0.1 config.zhangshuzheng.cn

  • 127.0.0.1 zkserver

  • 127.0.0.1 rdserver

  • 127.0.0.1 dbserver

  • 127.0.0.1 mqserver

編譯流程

maven編譯安裝zheng/pom.xml檔案即可

啟動順序(後臺)

準備工作

  • 新建zheng資料庫,匯入project-datamodel資料夾下的zheng.sql

  • 修改各dao模組和rpc-service模組的redis.properties、jdbc.properties、generator.properties資料庫連線等配置資訊,其中master.redis.password、master.jdbc.password、slave.jdbc.password、generator.jdbc.password密碼值使用了AES加密,請使用com.zheng.common.util.AESUtil工具類修改這些值

  • 啟動Zookeeper、Redis、ActiveMQ、Nginx(配置檔案參考project-tools/nginx下的*.conf檔案)

zheng-upms

  • 首先啟動 zheng-upms-rpc-service(直接執行src目錄下的ZhengUpmsRpcServiceApplication#main方法啟動) => zheng-upms-server(jetty),然後按需啟動對應子系統xxx的zheng-xxx-rpc-service(main方法) => zheng-xxx-webapp(jetty)

啟動演示

  • 訪問 http://upms.zhangshuzheng.cn:1111/,子系統選單已經配置到zheng-upms許可權中,不用直接訪問子系統,預設帳號密碼:admin/123456

  • 登入成功後,可在右上角切換已註冊系統訪問

zheng-cms

  • zheng-cms-admin:啟動ActiveMQ-啟動 => 啟動zheng-rpc-service => 啟動zheng-cms-admin

  • zheng-cms-web:啟動nginx代理zheng-ui靜態資源,配置檔案可參考 nginx.conf

zheng-oss

  • 首先啟動zheng-oss-web服務

  • 開發階段,如果zheng-oss-web沒有公網域名,推薦使用ngrok內網穿透工具,為開發環境提供公網域名,實現上傳回調

  • 啟動nginx代理zheng-ui靜態資源

開發演示(QQ群內有“zheng十分鐘視訊:從檢出到啟動.wmv”)

  • 建立資料表(建議使用PowerDesigner)

  • 直接執行對應專案dao模組中的generator.main(),可自動生成單表的CRUD功能和對應的model、example、mapper、service程式碼

    • 生成的model和example均已實現Serializable介面,支援分散式

    • 已包含抽象類BaseServiceImpl,只需要繼承抽象類並傳入泛型引數,即可預設實現mapper介面所有方法,特殊需求直接擴充套件即可

    • BaseServiceImpl預設已實現四種根據條件分頁介面

      • selectByExampleWithBLOBsForStartPage()

      • selectByExampleForStartPage()

      • selectByExampleWithBLOBsForOffsetPage()

      • selectByExampleForOffsetPage()

    • BaseServiceImpl方法根據讀寫操作自動切換主從資料來源,繼承的擴充套件介面,可手動通過DynamicDataSource.setDataSource(DataSourceEnum.XXX.getName())指定資料來源

  • 啟動流程:優先rcp-service服務提供者,再啟動其他webapp

  • 擴充套件流程:可擴充套件和拆分rpc-api和rpc-service模組,可按微服務拆分或場景拆分

部署方式(QQ群內有“zheng十分鐘視訊:從打包到linux伺服器部署.wmv”)

  • war包專案:使用tomcat等web容器啟動

  • rpc-service服務提供者jar包:將打包後的zheng-xxx-rpc-service-assembly.tar.gz檔案解壓,使用bin目錄的管理指令碼執行即可,支援優雅停機。

框架規範約定

約定優於配置(convention over configuration),此框架約定了很多程式設計規範,下面一一列舉:


- service類,需要在叫名`service`的包下,並以`Service`結尾,如`CmsArticleServiceImpl`

- controller類,需要在以`controller`結尾的包下,類名以Controller結尾,如`CmsArticleController.java`,並繼承`BaseController`

- spring task類,需要在叫名`task`的包下,並以`Task`結尾,如`TestTask.java`

- mapper.xml,需要在名叫`mapper`的包下,並以`Mapper.xml`結尾,如`CmsArticleMapper.xml`

- mapper介面,需要在名叫`mapper`的包下,並以`Mapper`結尾,如`CmsArticleMapper.java`

- model實體類,需要在名叫`model`的包下,命名規則為資料錶轉駝峰規則,如`CmsArticle.java`

- spring配置檔案,命名規則為`applicationContext-*.xml`

- 類名:首字母大寫駝峰規則;方法名:首字母小寫駝峰規則;常量:全大寫;變數:首字母小寫駝峰規則,儘量非縮寫

- springmvc配置加到對應模組的`springMVC-servlet.xml`檔案裡

- 配置檔案放到`src/main/resources`目錄下

- 靜態資原始檔放到`src/main/webapp/resources`目錄下

- jsp檔案,需要在`/WEB-INF/jsp`目錄下

- `RequestMapping`和返回物理試圖路徑的url儘量寫全路徑,如:`@RequestMapping("/manage")`、`return "/manage/index"`

- `RequestMapping`指定method

- 模組命名為`專案`-`子專案`-`業務`,如`zheng-cms-admin`

- 資料表命名為:`子系統`_`表`,如`cms_article`

- 更多規範,參考[[阿里巴巴Java開發手冊] http://git.oschina.net/shuzheng/zheng/attach_files

演示地址

預覽圖

idealoginupmscmsswagger

資料模型

資料庫模型

拓撲圖

拓撲圖

開發進度

開發進度

參與開發

首先謝謝大家支援,如果你希望參與開發,歡迎通過Github上fork本專案,並Pull Request您的commit。

常見問題

  • 報zheng-xxx.jar包找不到,請按照文件編譯順序,將原始碼編譯並安裝到本地maven倉庫

  • zheng-cms-admin啟動卡住:因為沒有啟動activemq

  • zheng-upms-server訪問報session不存在:因為沒有啟動redis服務

  • 介面沒有樣式:因為zheng-admin沒有編譯安裝到本地倉庫

附件

優秀文章和部落格

線上小工具

線上文件

許可證

MIT