作者:王振宇
zywork项目是基于SSM框架的多个子系统的集合,使用分布式服务架构,为开发者提供高效快捷的开发体验。开发团队不需要再配置SSM框架便可使用众多集成的功能,甚至是可用的系统!zywork项目遵循阿里巴巴的Java开发规范,并补充自己团队内部的一些Java开发规范。
zywork项目包含的功能有:
- 通用工具类
- 代码自动生成器
- 用户注册、登录,使用QQ,微信,微博等第三方登录的用户中心
- 基于Apache Shiro的权限管理
- 基于Activiti的业务流程管理
- 基于POI和JasperReport的Excel处理和PDF报表导出
- 基于ECharts的HTML5 WEB报表
- 基于Redis的数据缓存
- 基于Spring Session的分布式会话管理
- 基于Apache ZooKeeper和Dubbo的分布式服务架构
- 基于Logback的日志记录
- 基于Spring Task或QuartZ的作业调度
- 基于JavaMail和阿里云短信API的消息发送
- 基于微信支付,支付宝支付的支付中心
- 基于Vue.js和Element UI的前端及后台用户界面
SpringMVC + Spring + MyBatis
,但是同时也提供了Hibernate相关的工具类,尽管此项目并没有使用Hibernate。
此系统为分布式系统,包含有多个独立可运行的子系统,分布式协调服务基于Apache ZooKeeper,分布式服务基于阿里巴巴的Dubbo,使用Nginx提供Tomcat集群的负载均衡。
在zywork项目中,提供了一个documents
目录,用于存储本项目相关的所有文档,其中zywork.sql
文件是整个项目的数据库脚本文件,包含建立数据表及初始化数据的所有脚本。
名称 | 说明 |
---|---|
zywork-common | 通用模块,包含有常用的工具类 |
zywork-generator | 代码自动生成器模块,可自动生成项目中所需要的实体类,DAO接口及其MyBatis映射文件,Service接口及其实现类,Controller |
zywork-config | 通用配置文件中心,为子系统提供通用的配置文件 |
zywork-ucenter | 用户中心系统,包含有用户注册,登录,第三方登录 |
zywork-upms | 权限管理系统,细粒度的权限控制。包含模块,角色,权限等管理 |
zywork-cms | 内容管理系统,包含有文章类别,文章管理,系统通知,友情链接等 |
zywork-bpms | 业务流程系统,包含有业务流程的上传,手动部署业务流程,业务流程的执行等 |
zywork-report | 报表系统,包含有Excel的处理,PDF报表的导出,模板的导入与下载 |
zywork-message | 消息通知系统,包含有邮件,短信。消息模板的添加与修改 |
zywork-pay | 支付系统,包含有微信支付,支付宝支付。支付订单的管理 |
zywork-log | 日志系统,操作日志的记录,查询等管理 |
zywork-schedule | 作业调度系统,作业查询,修改,启动,停止,暂停与重启 |
zywork-ui | 基于Vue.js和Element UI的UI系统,包含前端用户界面和后台用户界面 |
后台部分:
技术 | 说明 |
---|---|
Apache Maven | 项目构建管理 |
Shell Script | Bash Shell脚本 |
SpringMVC | WEB控制器 |
Spring | IoC和AOP |
MyBatis | 数据库访问 |
MySQL | 数据库 |
Druid | 数据源及连接池 |
Apache Shiro | 权限认证 |
Redis | 分布式缓存数据库 |
Spring Session | 分布式Session会话管理 |
Activiti | 业务流程引擎 |
QuzrtZ | 作业调度 |
Apache POI | Excel处理 |
JasperReport | PDF报表 |
JavaMail | 邮件发送 |
阿里云短信API | 短信接口 |
slf4j & Logback | 日志记录 |
Apache ZooKeeper | 分布式协调服务 |
Dubbo | 分布式服务框架 |
Apache Kafka | 分布式消息队列 |
FastDFS | 分布式文件系统 |
阿里云OSS | 阿里云对象存储 |
前端部分:
技术 | 说明 |
---|---|
Node.js | Node.js |
npm | npm |
Webpack | Webpack |
Promise | Promise |
HTML5 | HTML5 |
CSS3 | CSS3 |
JavaScript | JavaScript |
Vue.js | 用户界面构建 |
Vue Router | Vue路由 |
Element UI | UI框架 |
axios | Vue AJAX请求 |
ECharts | HTML5 WEB报表 |
第三方登录:
QQ登录,微信登录,微博登录
在线支付:
微信支付,支付宝支付
后台服务:
Ngnix, Tomcat, ZooKeeper, Redis, MySQL
开发及测试环境:
MacOS, IntellijIDEA, Google Chrome, Postman, JDK1.8, JavaEE7.0, Nginx, Tomcat8.5, ZooKeeper, Redis, MySQL5.7
Spring与Dubbo整合注意事项:
Dubbo提供了Java Configuration API,Properties,XML和注解的配置形式。此项目中推荐使用XML配置文件的形式,可支持事务管理的服务。如果使用注解的形式,则不支持事务管理的服务,并会出现Dubbo注解@Reference
引用为null
的问题。
Dubbo的服务超时时间设置在Provider中,不需要在Consumer中设置超时时间,根据服务性能确定超时时间。
Provider中定义服务实现类时,使用@Service(value = "userService")
的注解,不需要在spring-dubbo-provider.xml
文件中定义bean组件。
在Consumer中使用Provider服务时,使用@Resource
注解或@Autowired(required = false)
注解引用服务。
Dubbo服务打包成JAR包
此项目中,Dubbo服务通过Maven打包成JAR包,使用Dubbo框架提供的com.alibaba.dubbo.container.Main
类来运行,以支持Dubbo的优雅停机(kill PID)
。运行JAR包,需要把JAR文件和相关的依赖库的lib目录放在同一个目录,Dubbo默认从classes
目录下的META-INF/spring
目录去读取Spring配置文件,而此项目是把配置文件放在classes
目录下的config
目录中,所以运行时需要重新指定Spring的配置文件。运行命令如下:
java -Ddubbo.spring.config=classpath*:/config/*.xml -jar zywork-ucenter-service.jar
如果不想使用java命令来启动服务,每个子系统都提供了独立的Shell脚本来启动,停止和重启服务。如zywork-ucenter-service-impl
中提供了zywork-ucenter-service.sh
脚本,在把Dubbo服务打包成JAR包时,会把Shell脚本自动打包到与JAR文件同级的目录中。在使用脚本前,需要设置JAVA_HOME
环境变量,并给脚本加上可执行权限。脚本使用方法如下:
启动服务:./zywork-ucenter-service.sh start
停止服务:./zywork-ucenter-service.sh stop
重启服务:./zywork-ucenter-service.sh restart
- MySQL
- Redis
- ZooKeeper
- Tomcat
- Nginx
- Node(部署前端)
所有模块的JAR和WAR都直接使用Maven构建,服务打包成JAR(参考Dubbo服务打包成JAR包
)。
Web模块打包成WAR包,此系统中有多个WAR包,所有WAR包都部署到同一个Tomcat的Webapps目录中,由多个这样的Tomcat组成Tomcat集群。每个WEB模块都通过应用上下文路径来访问。
前端UI使用npm构建,详细请参考zywork-ui
模块,构建好后部署到Nginx服务器中,Nginx服务器提供对Tomcat的负载均衡和动静分离。
运行步骤推荐为:
- 启动相关服务
- 构建JAR包和WAR包
- 启动JAR服务
- 部署WAR包并启动Tomcat
- 构建前端模块并部署到Nginx
- 启动Nginx
- 浏览器测试
Copyright © 王振宇 http://zywork.top