前言
zheng項目不僅僅是一個開發架構,而是努力打造一套從 前端模闆 - 基礎架構 - 分布式架構 - 開源項目 - 持續內建 - 自動化部署 - 系統監測 - 無縫更新 的全方位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-message -- 實時通知系統
| ├── zheng-message-sdk -- 開發工具包
| ├── zheng-message-server -- 服務端[端口:8881,SocketIO端口:8882]
| └── zheng-message-client -- 用戶端
├── zheng-shop -- 電子商務系統
└── zheng-demo -- 示例子產品(包含一些示例代碼等)
├── zheng-demo-rpc-api -- rpc接口包
├── zheng-demo-rpc-service -- rpc服務提供者
└── zheng-demo-web -- 示範示例[端口:9999]
技術選型
後端技術:
技術 | 名稱 | 官網 |
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 | 資料庫連接配接池 | https://github.com/alibaba/druid |
FluentValidator | 校驗架構 | https://github.com/neoremind/fluent-validator |
Thymeleaf | 模闆引擎 | http://www.thymeleaf.org/ |
Velocity | 模闆引擎 | http://velocity.apache.org/ |
ZooKeeper | 分布式協調服務 | http://zookeeper.apache.org/ |
Dubbo | 分布式服務架構 | http://dubbo.io/ |
TBSchedule & elastic-job | 分布式排程架構 | https://github.com/dangdangdotcom/elastic-job |
Redis | 分布式緩存資料庫 | https://redis.io/ |
Solr & Elasticsearch | 分布式全文搜尋引擎 | http://lucene.apache.org/solr/ https://www.elastic.co/ |
Quartz | 作業排程架構 | http://www.quartz-scheduler.org/ |
Ehcache | 程序内緩存架構 | http://www.ehcache.org/ |
ActiveMQ | 消息隊列 | http://activemq.apache.org/ |
JStorm | 實時流式計算架構 | http://jstorm.io/ |
FastDFS | 分布式檔案系統 | https://github.com/happyfish100/fastdfs |
Log4J | 日志元件 | http://logging.apache.org/log4j/1.2/ |
Swagger2 | 接口測試架構 | http://swagger.io/ |
sequence | 分布式高效ID生産 | 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 | 資料序列化 | https://github.com/google/protobuf |
Jenkins | 持續內建工具 | https://jenkins.io/index.html |
Maven | 項目建構管理 | http://maven.apache.org/ |
Netty-socketio | 實時推送 | https://github.com/mrniko/netty-socketio |
前端技術:
技術 | 名稱 | 官網 |
jQuery | 函式庫 | http://jquery.com/ |
Bootstrap | 前端架構 | http://getbootstrap.com/ |
Bootstrap-table | Bootstrap資料表格 | 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 | 界面建構架構 | https://github.com/facebook/react |
Editor.md | Markdown編輯器 | https://github.com/pandao/editor.md |
zhengAdmin | 背景管理系統模闆 | 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/ |
項目介紹很全,請耐心觀看,如果你對這個項目感興趣,可以幫忙點贊轉發下,私信【學習】,免費分享
架構圖
子產品依賴
子產品介紹
zheng-common
Spring+SpringMVC+Mybatis架構內建公共子產品,包括公共配置、MybatisGenerator擴充插件、通用BaseService、工具類等。
zheng-admin
基于bootstrap實作的響應式Material Design風格的通用背景管理系統,zheng項目所有背景系統都是使用該子產品界面作為前端展示。
zheng-ui
各個子系統前台thymeleaf模闆,前端資源子產品,使用nginx代理,實作動靜分離。
zheng-upms
本系統是基于RBAC授權和基于使用者授權的細粒度權限控制通用平台,并提供單點登入、會話管理和日志管理。接入的系統可自由定義組織、角色、權限、資源等。使用者權限=所擁有角色權限合集+使用者權重限-使用者減權限,優先級:使用者減權限>使用者權重限>角色權限
zheng-oss
檔案存儲系統,提供四種方案:
- 阿裡雲 OSS
- 騰訊雲 COS
- 七牛雲
- 本地分布式存儲
zheng-api
服務網關,對外暴露統一規範的接口和包裝響應結果,包括各個子系統的互動接口、對外開放接口、開發加密接口、接口文檔等服務,可在該子產品支援驗簽、鑒權、路由、限流、監控、容錯、日志等功能。示例圖:
zheng-cms
内容管理系統:支援多标簽、多類目、強大評論的内容管理,有基本單頁展示,菜單管理,系統設定等功能。
zheng-pay
- 一站式支付解決方案,統一下單接口,支援支付寶、微信、網銀等多種支付方式。不涉及業務的純粹的支付平台。
- 統一下單(統一下單接口、統一掃碼)、訂單管理、資料分析、财務報表、商戶管理、管道管理、對賬系統、系統監控。
zheng-ucenter
通用使用者管理系統, 實作最常用的使用者注冊、登入、資料管理、個人中心、第三方登入等基本需求,支援擴充二次開發。
zheng-wechat-mp
微信公衆号管理平台,除實作官網背景自動回複、菜單管理、素材管理、使用者管理、消息群發等基礎功能外,還有二維碼推廣、營銷活動、微網站、會員卡、優惠券等。
zheng-wechat-app
微信小程式背景
zheng-message
基于Netty實作SocketIO的實時推送系統。支援命名空間、二進制資料、SSL、ACK等功能。
項目介紹很全,請耐心觀看,如果你對這個項目感興趣,可以幫忙點贊轉發下,私信【學習】,免費分享
環境搭建(有“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
工具安裝
環境搭建和系統部署文檔
開發指南:
- 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靜态資源
開發示範(有“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子產品,可按微服務拆分或場景拆分
部署方式(有“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
示範位址
示範位址: http://upms.zhangshuzheng.cn/
預覽圖
資料模型
拓撲圖
開發進度
參與開發
首先謝謝大家支援,如果你希望參與開發,歡迎通過Github上fork本項目,并Pull Request您的commit。
常見問題
- Eclipse下,dubbo找不到dubbo.xsd報錯,不影響使用,如果要解決,可參考 http://blog.csdn.net/gjldwz/article/details/50555922
- 報zheng-xxx.jar包找不到,請按照文檔編譯順序,将源代碼編譯并安裝到本地maven倉庫
- zheng-cms-admin啟動卡住:因為沒有啟動activemq
- zheng-upms-server通路報session不存在:因為沒有啟動redis服務
- 界面沒有樣式:因為zheng-admin沒有編譯安裝到本地倉庫
- linux下執行rpc-service腳本報“bin/bash^M 壞的解釋器”,使用sed -i 's/\r$//' filename删除腳本中\r字元
開源位址:
點贊+轉發,私信【學習】,免費分享@程式猿阿嘴