基于Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构(附源码)
作者:zheng
gitee.com/shuzheng/zheng/blob/master/README.md
前言
zheng項目不僅僅是一個開發(fā)架構(gòu),而是努力打造一套從 前端模板 - 基礎(chǔ)框架 - 分布式架構(gòu) - 開源項目 - 持續(xù)集成 - 自動化部署 - 系統(tǒng)監(jiān)測 - 無縫升級 的全方位J2EE企業(yè)級開發(fā)解決方案。
項目介紹
基于Spring+SpringMVC+Mybatis分布式敏捷開發(fā)系統(tǒng)架構(gòu),提供整套公共微服務(wù)服務(wù)模塊:內(nèi)容管理、支付中心、用戶管理(包括第三方)、微信平臺、存儲系統(tǒng)、配置中心、日志分析、任務(wù)和通知等,支持服務(wù)治理、監(jiān)控和追蹤,努力為中小型企業(yè)打造全方位J2EE企業(yè)級開發(fā)解決方案。
組織結(jié)構(gòu)
zheng ├──?zheng-common?--?SSM框架公共模塊 ├──?zheng-admin?--?后臺管理模板 ├──?zheng-ui?--?前臺thymeleaf模板[端口:1000] ├──?zheng-config?--?配置中心[端口:1001] ├──?zheng-upms?--?用戶權(quán)限管理系統(tǒng) |????├──?zheng-upms-common?--?upms系統(tǒng)公共模塊 |????├──?zheng-upms-dao?--?代碼生成模塊,無需開發(fā) |????├──?zheng-upms-client?--?集成upms依賴包,提供單點認證、授權(quán)、統(tǒng)一會話管理 |????├──?zheng-upms-rpc-api?--?rpc接口包 |????├──?zheng-upms-rpc-service?--?rpc服務(wù)提供者 |????└──?zheng-upms-server?--?用戶權(quán)限系統(tǒng)及SSO服務(wù)端[端口:1111] ├──?zheng-cms?--?內(nèi)容管理系統(tǒng) |????├──?zheng-cms-common?--?cms系統(tǒng)公共模塊 |????├──?zheng-cms-dao?--?代碼生成模塊,無需開發(fā) |????├──?zheng-cms-rpc-api?--?rpc接口包 |????├──?zheng-cms-rpc-service?--?rpc服務(wù)提供者 |????├──?zheng-cms-search?--?搜索服務(wù)[端口:2221] |????├──?zheng-cms-admin?--?后臺管理[端口:2222] |????├──?zheng-cms-job?--?消息隊列、任務(wù)調(diào)度等[端口:2223] |????└──?zheng-cms-web?--?網(wǎng)站前臺[端口:2224] ├──?zheng-pay?--?支付系統(tǒng) |????├──?zheng-pay-common?--?pay系統(tǒng)公共模塊 |????├──?zheng-pay-dao?--?代碼生成模塊,無需開發(fā) |????├──?zheng-pay-rpc-api?--?rpc接口包 |????├──?zheng-pay-rpc-service?--?rpc服務(wù)提供者 |????├──?zheng-pay-sdk?--?開發(fā)工具包 |????├──?zheng-pay-admin?--?后臺管理[端口:3331] |????└──?zheng-pay-web?--?演示示例[端口:3332] ├──?zheng-ucenter?--?用戶系統(tǒng)(包括第三方登錄) |????├──?zheng-ucenter-common?--?ucenter系統(tǒng)公共模塊 |????├──?zheng-ucenter-dao?--?代碼生成模塊,無需開發(fā) |????├──?zheng-ucenter-rpc-api?--?rpc接口包 |????├──?zheng-ucenter-rpc-service?--?rpc服務(wù)提供者 |????└──?zheng-ucenter-web?--?網(wǎng)站前臺[端口:4441] ├──?zheng-wechat?--?微信系統(tǒng) |????├──?zheng-wechat-mp?--?微信公眾號管理系統(tǒng) |????|????├──?zheng-wechat-mp-dao?--?代碼生成模塊,無需開發(fā) |????|????├──?zheng-wechat-mp-service?--?業(yè)務(wù)邏輯 |????|????└──?zheng-wechat-mp-admin?--?后臺管理[端口:5551] |????└──?zheng-ucenter-app?--?微信小程序后臺 ├──?zheng-api?--?API接口總線系統(tǒng) |????├──?zheng-api-common?--?api系統(tǒng)公共模塊 |????├──?zheng-api-rpc-api?--?rpc接口包 |????├──?zheng-api-rpc-service?--?rpc服務(wù)提供者 |????└──?zheng-api-server?--?api系統(tǒng)服務(wù)端[端口:6666] ├──?zheng-oss?--?對象存儲系統(tǒng) |????├──?zheng-oss-sdk?--?開發(fā)工具包 |????├──?zheng-oss-web?--?前臺接口[端口:7771] |????└──?zheng-oss-admin?--?后臺管理[端口:7772] ├──?zheng-message?--?實時通知系統(tǒng) |????├──?zheng-message-sdk?--?開發(fā)工具包 |????├──?zheng-message-server?--?服務(wù)端[端口:8881,SocketIO端口:8882] |????└──?zheng-message-client?--?客戶端 ├──?zheng-shop?--?電子商務(wù)系統(tǒng) └──?zheng-demo?--?示例模塊(包含一些示例代碼等)├──?zheng-demo-rpc-api?--?rpc接口包├──?zheng-demo-rpc-service?--?rpc服務(wù)提供者└──?zheng-demo-web?--?演示示例[端口:9999]技術(shù)選型
后端技術(shù):
| Spring Framework | 容器 | http://projects.spring.io/spring-framework/ |
| SpringMVC | MVC框架 | http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc |
| Apache Shiro | 安全框架 | http://shiro.apache.org/ |
| Spring session | 分布式Session管理 | http://projects.spring.io/spring-session/ |
| MyBatis | ORM框架 | http://www.mybatis.org/mybatis-3/zh/index.html |
| MyBatis Generator | 代碼生成 | http://www.mybatis.org/generator/index.html |
| PageHelper | MyBatis物理分頁插件 | http://git.oschina.net/free/Mybatis_PageHelper |
| Druid | 數(shù)據(jù)庫連接池 | https://github.com/alibaba/druid |
| FluentValidator | 校驗框架 | https://github.com/neoremind/fluent-validator |
| Thymeleaf | 模板引擎 | http://www.thymeleaf.org/ |
| Velocity | 模板引擎 | http://velocity.apache.org/ |
| ZooKeeper | 分布式協(xié)調(diào)服務(wù) | http://zookeeper.apache.org/ |
| Dubbo | 分布式服務(wù)框架 | http://dubbo.io/ |
| TBSchedule & elastic-job | 分布式調(diào)度框架 | https://github.com/dangdangdotcom/elastic-job |
| Redis | 分布式緩存數(shù)據(jù)庫 | https://redis.io/ |
| Solr & Elasticsearch | 分布式全文搜索引擎 | http://lucene.apache.org/solr/ https://www.elastic.co/ |
| Quartz | 作業(yè)調(diào)度框架 | http://www.quartz-scheduler.org/ |
| Ehcache | 進程內(nèi)緩存框架 | http://www.ehcache.org/ |
| ActiveMQ | 消息隊列 | http://activemq.apache.org/ |
| JStorm | 實時流式計算框架 | http://jstorm.io/ |
| FastDFS | 分布式文件系統(tǒng) | https://github.com/happyfish100/fastdfs |
| Log4J | 日志組件 | http://logging.apache.org/log4j/1.2/ |
| Swagger2 | 接口測試框架 | http://swagger.io/ |
| sequence | 分布式高效ID生產(chǎn) | http://git.oschina.net/yu120/sequence |
| AliOSS & Qiniu & QcloudCOS | 云存儲 | https://www.aliyun.com/product/oss/ http://www.qiniu.com/ https://www.qcloud.com/product/cos |
| Protobuf & json | 數(shù)據(jù)序列化 | https://github.com/google/protobuf |
| Jenkins | 持續(xù)集成工具 | https://jenkins.io/index.html |
| Maven | 項目構(gòu)建管理 | http://maven.apache.org/ |
| Netty-socketio | 實時推送 | https://github.com/mrniko/netty-socketio |
前端技術(shù):
| jQuery | 函式庫 | http://jquery.com/ |
| Bootstrap | 前端框架 | http://getbootstrap.com/ |
| Bootstrap-table | Bootstrap數(shù)據(jù)表格 | http://bootstrap-table.wenzhixin.net.cn/ |
| Font-awesome | 字體圖標 | http://fontawesome.io/ |
| material-design-iconic-font | 字體圖標 | https://github.com/zavoloklom/material-design-iconic-font |
| Waves | 點擊效果插件 | https://github.com/fians/Waves |
| zTree | 樹插件 | http://www.treejs.cn/v3/ |
| Select2 | 選擇框插件 | https://github.com/select2/select2 |
| jquery-confirm | 彈出窗口插件 | https://github.com/craftpip/jquery-confirm |
| jQuery EasyUI | 基于jQuery的UI插件集合體 | http://www.jeasyui.com |
| React | 界面構(gòu)建框架 | https://github.com/facebook/react |
| Editor.md | Markdown編輯器 | https://github.com/pandao/editor.md |
| zhengAdmin | 后臺管理系統(tǒng)模板 | https://github.com/shuzheng/zhengAdmin |
| autoMail | 郵箱地址自動補全插件 | https://github.com/shuzheng/autoMail |
| zheng.jprogress.js | 加載進度條插件 | https://github.com/shuzheng/zheng.jprogress.js |
| zheng.jtotop.js | 返回頂部插件 | https://github.com/shuzheng/zheng.jtotop.js |
| socket.io.js | SocketIO插件 | https://socket.io/ |
架構(gòu)圖
架構(gòu)圖模塊依賴
模塊依賴模塊介紹
zheng-common
Spring+SpringMVC+Mybatis框架集成公共模塊,包括公共配置、MybatisGenerator擴展插件、通用BaseService、工具類等。
zheng-admin
基于bootstrap實現(xiàn)的響應(yīng)式Material Design風格的通用后臺管理系統(tǒng),zheng項目所有后臺系統(tǒng)都是使用該模塊界面作為前端展示。
zheng-ui
各個子系統(tǒng)前臺thymeleaf模板,前端資源模塊,使用nginx代理,實現(xiàn)動靜分離。
zheng-upms
本系統(tǒng)是基于RBAC授權(quán)和基于用戶授權(quán)的細粒度權(quán)限控制通用平臺,并提供單點登錄、會話管理和日志管理。接入的系統(tǒng)可自由定義組織、角色、權(quán)限、資源等。用戶權(quán)限=所擁有角色權(quán)限合集+用戶加權(quán)限-用戶減權(quán)限,優(yōu)先級:用戶減權(quán)限>用戶加權(quán)限>角色權(quán)限
zheng-oss
文件存儲系統(tǒng),提供四種方案:
阿里云 OSS
騰訊云 COS
七牛云
本地分布式存儲
zheng-api
服務(wù)網(wǎng)關(guān),對外暴露統(tǒng)一規(guī)范的接口和包裝響應(yīng)結(jié)果,包括各個子系統(tǒng)的交互接口、對外開放接口、開發(fā)加密接口、接口文檔等服務(wù),可在該模塊支持驗簽、鑒權(quán)、路由、限流、監(jiān)控、容錯、日志等功能。示例圖:
API網(wǎng)關(guān)zheng-cms
內(nèi)容管理系統(tǒng):支持多標簽、多類目、強大評論的內(nèi)容管理,有基本單頁展示,菜單管理,系統(tǒng)設(shè)置等功能。
zheng-pay
一站式支付解決方案,統(tǒng)一下單接口,支持支付寶、微信、網(wǎng)銀等多種支付方式。不涉及業(yè)務(wù)的純粹的支付平臺。
統(tǒng)一下單(統(tǒng)一下單接口、統(tǒng)一掃碼)、訂單管理、數(shù)據(jù)分析、財務(wù)報表、商戶管理、渠道管理、對賬系統(tǒng)、系統(tǒng)監(jiān)控。
zheng-ucenter
通用用戶管理系統(tǒng), 實現(xiàn)最常用的用戶注冊、登錄、資料管理、個人中心、第三方登錄等基本需求,支持擴展二次開發(fā)。
zheng-wechat-mp
微信公眾號管理平臺,除實現(xiàn)官網(wǎng)后臺自動回復(fù)、菜單管理、素材管理、用戶管理、消息群發(fā)等基礎(chǔ)功能外,還有二維碼推廣、營銷活動、微網(wǎng)站、會員卡、優(yōu)惠券等。
zheng-wechat-app
微信小程序后臺
zheng-message
基于Netty實現(xiàn)SocketIO的實時推送系統(tǒng)。支持命名空間、二進制數(shù)據(jù)、SSL、ACK等功能。
搜索Java知音公眾號,回復(fù)“后端面試”,送你一份Java面試題寶典.pdf
環(huán)境搭建(QQ群內(nèi)有“zheng環(huán)境搭建和系統(tǒng)部署文檔.doc”)
開發(fā)工具:
MySql: 數(shù)據(jù)庫
jetty: 開發(fā)服務(wù)器
Tomcat: 應(yīng)用服務(wù)器
SVN|Git: 版本管理
Nginx: 反向代理服務(wù)器
Varnish: HTTP加速器
IntelliJ IDEA: 開發(fā)IDE
PowerDesigner: 建模工具
Navicat for MySQL: 數(shù)據(jù)庫客戶端
開發(fā)環(huán)境:
Jdk7+
Mysql5.5+
Redis
Zookeeper
ActiveMQ
Dubbo-admin
Dubbo-monitor
工具安裝
環(huán)境搭建和系統(tǒng)部署文檔(作者:小兵,QQ群共享提供下載)
資源下載
JDK7 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html[1]
Maven http://maven.apache.org/download.cgi[2]
Redis https://redis.io/download[3]
ActiveMQ http://activemq.apache.org/download-archives.html[4]
ZooKeeper http://www.apache.org/dyn/closer.cgi/zookeeper/[5]
Dubbo http://dubbo.io/Download-zh.htm[6]
Elastic Stack https://www.elastic.co/downloads[7]
Nginx http://nginx.org/en/download.html[8]
Jenkins http://updates.jenkins-ci.org/download/war/[9]
dubbo-admin-2.5.3 http://download.csdn.net/detail/shuzheng5201314/9733652[10]
dubbo-admin-2.5.4-SNAPSHOT-jdk8 http://download.csdn.net/detail/shuzheng5201314/9733657[11]
開發(fā)指南:
1、本機安裝Jdk7、Mysql、Redis、Zookeeper、ActiveMQ并啟動相關(guān)服務(wù),使用默認配置默認端口即可
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數(shù)據(jù)庫,導(dǎo)入project-datamodel文件夾下的zheng.sql
修改各dao模塊和rpc-service模塊的redis.properties、jdbc.properties、generator.properties數(shù)據(jù)庫連接等配置信息,其中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),然后按需啟動對應(yīng)子系統(tǒng)xxx的zheng-xxx-rpc-service(main方法) => zheng-xxx-webapp(jetty)
訪問 http://upms.zhangshuzheng.cn:1111/[12],子系統(tǒng)菜單已經(jīng)配置到zheng-upms權(quán)限中,不用直接訪問子系統(tǒng),默認帳號密碼:admin/123456
登錄成功后,可在右上角切換已注冊系統(tǒng)訪問
zheng-cms
zheng-cms-admin:啟動ActiveMQ-啟動 => 啟動zheng-rpc-service => 啟動zheng-cms-admin
zheng-cms-web:啟動nginx代理zheng-ui靜態(tài)資源,配置文件可參考 nginx.conf
zheng-oss
首先啟動zheng-oss-web服務(wù)
開發(fā)階段,如果zheng-oss-web沒有公網(wǎng)域名,推薦使用ngrok內(nèi)網(wǎng)穿透工具,為開發(fā)環(huán)境提供公網(wǎng)域名,實現(xiàn)上傳回調(diào)
啟動nginx代理zheng-ui靜態(tài)資源
開發(fā)演示(QQ群內(nèi)有“zheng十分鐘視頻:從檢出到啟動.wmv”)
創(chuàng)建數(shù)據(jù)表(建議使用PowerDesigner)
直接運行對應(yīng)項目dao模塊中的generator.main(),可自動生成單表的CRUD功能和對應(yīng)的model、example、mapper、service代碼
selectByExampleWithBLOBsForStartPage()
selectByExampleForStartPage()
selectByExampleWithBLOBsForOffsetPage()
selectByExampleForOffsetPage()
生成的model和example均已實現(xiàn)Serializable接口,支持分布式
已包含抽象類BaseServiceImpl,只需要繼承抽象類并傳入泛型參數(shù),即可默認實現(xiàn)mapper接口所有方法,特殊需求直接擴展即可
BaseServiceImpl默認已實現(xiàn)四種根據(jù)條件分頁接口
BaseServiceImpl方法根據(jù)讀寫操作自動切換主從數(shù)據(jù)源,繼承的擴展接口,可手動通過DynamicDataSource.setDataSource(DataSourceEnum.XXX.getName())指定數(shù)據(jù)源
啟動流程:優(yōu)先rcp-service服務(wù)提供者,再啟動其他webapp
擴展流程:可擴展和拆分rpc-api和rpc-service模塊,可按微服務(wù)拆分或場景拆分
部署方式(QQ群內(nèi)有“zheng十分鐘視頻:從打包到linux服務(wù)器部署.wmv”)
war包項目:使用tomcat等web容器啟動
rpc-service服務(wù)提供者jar包:將打包后的zheng-xxx-rpc-service-assembly.tar.gz文件解壓,使用bin目錄的管理腳本運行即可,支持優(yōu)雅停機。
框架規(guī)范約定
約定優(yōu)于配置(convention over configuration),此框架約定了很多編程規(guī)范,下面一一列舉:
service類,需要在叫名service的包下,并以Service結(jié)尾,如CmsArticleServiceImpl
controller類,需要在以controller結(jié)尾的包下,類名以Controller結(jié)尾,如CmsArticleController.java,并繼承BaseController
spring task類,需要在叫名task的包下,并以Task結(jié)尾,如TestTask.java
mapper.xml,需要在名叫mapper的包下,并以Mapper.xml結(jié)尾,如CmsArticleMapper.xml
mapper接口,需要在名叫mapper的包下,并以Mapper結(jié)尾,如CmsArticleMapper.java
model實體類,需要在名叫model的包下,命名規(guī)則為數(shù)據(jù)表轉(zhuǎn)駝峰規(guī)則,如CmsArticle.java
spring配置文件,命名規(guī)則為applicationContext-*.xml
類名:首字母大寫駝峰規(guī)則;方法名:首字母小寫駝峰規(guī)則;常量:全大寫;變量:首字母小寫駝峰規(guī)則,盡量非縮寫
springmvc配置加到對應(yīng)模塊的springMVC-servlet.xml文件里
配置文件放到src/main/resources目錄下
靜態(tài)資源文件放到src/main/webapp/resources目錄下
jsp文件,需要在/WEB-INF/jsp目錄下
RequestMapping和返回物理試圖路徑的url盡量寫全路徑,如:@RequestMapping("/manage")、return "/manage/index"
RequestMapping指定method
模塊命名為項目-子項目-業(yè)務(wù),如zheng-cms-admin
數(shù)據(jù)表命名為:子系統(tǒng)_表,如cms_article
更多規(guī)范,參考[[阿里巴巴Java開發(fā)手冊] http://git.oschina.net/shuzheng/zheng/attach_files
演示地址
演示地址:http://upms.zhangshuzheng.cn/[13]
預(yù)覽圖
????
數(shù)據(jù)模型
數(shù)據(jù)庫模型拓撲圖
拓撲圖項目地址
https://gitee.com/shuzheng/zheng/
推薦文章面試官問:前后端分離項目,有什么優(yōu)缺點?我說:沒
2020 年騰訊新增 20 億行代碼,鵝廠第一編程語言還是它
通俗講解分布式鎖,看完不懂算我輸
寫博客能月入10K?
一款基于 Spring Boot 的現(xiàn)代化社區(qū)(論壇/問答/社交網(wǎng)絡(luò)/博客)
這或許是最美的Vue+Element開源后臺管理UI
推薦一款高顏值的 Spring Boot 快速開發(fā)框架
一款基于 Spring Boot 的現(xiàn)代化社區(qū)(論壇/問答/社交網(wǎng)絡(luò)/博客)
13K點贊都基于 Vue+Spring 前后端分離管理系統(tǒng)ELAdmin,大愛
想接私活時薪再翻一倍,建議根據(jù)這幾個開源的SpringBoot項目
總結(jié)
以上是生活随笔為你收集整理的基于Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构(附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 47K Star 的SpringBoot
- 下一篇: 为什么同样是上亿的并发,购票系统就要比电