xPlatform
一个基于Springboot2.X+Dubbo2.6.x的后台快速开发框架
介绍
说明
与Platform_admin搭配(前后端分离),支持分布式部署
架构说明
总体设计思想:
- xPlatfrom是基于SpringBoot+Dubbo+VUE构建的一个前后端分离的快速开发平台,旨在为项目组提供一套快速,高效,稳定,规范的开发框架,以适应当前快速迭代的开发任务。
- xPlatfrom提供前后端开发框架,前端主要基于VUE,利用VUE动态路由,动态加载系统定义的功能模块,将各个子系统集成,形成一个统一的运营管理平台。后端主要采用SpringBoot+Dubbo开发模式,各子系统依赖框架提供的基础包只需要实现具体业务功能即可,相关基础服务,如持久化,缓存,安全,日志,文件上传下载等都由框架提供。
- xPlatfrom是前后端分离支持分布式部署的,前端部署在静态服务器即可,如Nginx。后端分服务消费者和服务提供者,服务消费者即服务控制层是前端请求的入口,可部署多个,通过Nginx做负载均衡。服务提供者实现具体业务逻辑,是业务处理的核心,为服务消费者提供具体服务,可部署多个,由Dubbo提供服务治理功能。
- 基于以上实现便可构建一个前后端分离,分布式部署,动态扩展的应用系统。
项目结构
platform_genenator 生成器
└── src
├── main
│ ├── java
│ │ └── com.platform.genenator
└── └── └────── PlatformGenerator 生成器
platform_common 公共组件
└── src
├── main
│ ├── java
│ │ └── com.platform.common
│ │ ├────── cache 缓存配置
│ │ ├────── constant 常量定义
│ │ ├────── dto 公共数据传输对象
│ │ ├────── enums 枚举类
│ │ ├────── exception 异常信息
│ └── └────── utils 工具类
└── test 测试
platform_common_api 服务接口公共组件
└── src
├── main
│ ├── java
│ │ └── com.platform.common.api
│ │ ├────── dao dao基类
│ │ ├────── entity entity基类
│ │ ├────── service service基类
│ └── └────── vo 公共值对象
└── test 测试
platform_common_consumer 服务消费者公共组件
└── src
├── main
│ ├── java
│ │ └── com.platform.common.consumer
│ │ ├────── annotation 自定义annotation
│ │ ├────── aspect 切面
│ │ ├────── config 公共配置
│ │ ├────── controller 控制器基类
│ │ ├────── exception consumer相关异常
│ │ ├────── filter 过滤器
│ │ ├────── interceptor 拦截器
│ └── └────── jwt jwt
└── test 测试
platform_common_provider 服务提供者公共组件
└── src
├── main
│ ├── java
│ │ └── com.platform.common.provider
│ └── └────── config druid,mybatisplus相关配置
└── test 测试
platform_system_api 系统服务接口
└── src
├── main
│ ├── java
│ │ └── com.platform.system.api
│ │ ├────── entity 实体类
│ │ ├────── enums 枚举类
│ │ ├────── service 服务接口
│ │ ├────── util 工具类型
│ └── └────── vo 值对象
└── test 测试
platform_system_consumer 系统服务消费者
└── src
├── main
│ ├── java
│ │ └── com.platform.system.consumer
│ │ ├────── config 缓存配置
│ │ ├────── controller 枚举类
│ │ ├────── shiro 枚举类
│ │ └────── task 异常信息
│ └── resource
│ ├── config
│ │ ├── csrfWhite.txt csrf白名单
│ │ └── xssWhite.txt xss白名单
│ ├── application-dev.properties 开发环境配置
│ ├── application.properties 配置
│ ├── fdfs.properties fdfs配置
│ ├── logback-spring.xml logback配置
│ └── ValidationMessages.properties 校验规则
└── test 测试
platform_system_provider 系统服务提供者
└── src
├── main
│ ├── java
│ │ └── com.platform.system.provider
│ │ ├────── dao dao接口
│ │ └────── service 接口服务实现类
│ └── resource
│ ├── mapper mapper配置
│ ├── application-dev.properties 开发环境配置
│ ├── application.properties 配置
│ └── logback-spring.xml logback配置
└── test 测试
相关技术:
- spring boot 2.0.6.RELEASE
- dubbo 2.6.3
- mybatis 3.4.4
- mybatis-plus 2.1.0
- druid 1.1.1
- shiro 1.4.0
- jjwt 0.9.0
- hibernate validator 6.0.13
- Redis 4.0.11
- zookeeper 3.4.12
接口设计:
RESTful
认证与授权:
shiro jwt
项目搭建
运行环境:
jdk1.8+maven+redis+zookeeper。
编码约定
文件名称约定
在页面文件夹中,按照功能模块分别建立不同的文件夹存放页面,
如用户的页面就放在user文件夹中,而角色的就放在role文件夹中。
- 页面如果是列表类型的。页面的文件名用UserList.vue命名。
controller、service、dao方法名称约定
- 如果是增加数据操作用insert做前缀。
- 如果是删除操作用delete做前缀
- 如果是修改操作用update做前缀
- 如果是查询操作用select做前缀
新建一个功能模块
第一步:数据库定义
生成基础代码
第二步:接口定义
-
pom依赖:需要依赖接口公共模块
<dependency> <groupId>com.platform</groupId> <artifactId>platform_common_api</artifactId> <version>${project.version}</version> </dependency>
-
entity定义:使用mybatisplus注解,并继承DataEntity<实体类>>,如:
@TableName("sys_company") public class SysCompany extends DataEntity<SysCompany>
-
service定义:继承IBaseService<实体类>>,如:
public interface ISysCompanyService extends IBaseService<SysCompany>
第三步:服务提供者定义
-
pom依赖:需要依赖服务提供者公共模块,业务接口模块
<dependency> <groupId>com.platform</groupId> <artifactId>platform_system_api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.platform</groupId> <artifactId>platform_common_provider</artifactId> <version>${project.version}</version> </dependency>
-
dao定义:继承CrudDao<实体类>,如:
public interface SysCompanyDao extends CrudDao<SysCompany>
-
service接口实现定义:继承BaseServiceImpl<dao定义, 实体类>,实现服务接口,如:
@Component @Transactional(readOnly = true,rollbackFor = Exception.class) @Service(interfaceClass = ISysCompanyService.class) public class SysCompanyService extends BaseServiceImpl<SysCompanyDao, SysCompany> implements ISysCompanyService
第四步:服务消费者定义
-
pom依赖:需要依赖服务消费者公共模块,业务接口模块
<dependency> <groupId>com.platform</groupId> <artifactId>platform_system_api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.platform</groupId> <artifactId>platform_common_consumer</artifactId> <version>${project.version}</version> </dependency>
-
controller定义:继承BaseController,如:
@Controller @RequestMapping(value = "/sys/user") public class SysUserController extends BaseController{ @Reference private ISysUserService sysUserService; .... }
第五步:定义列表页面
- 需要在前端工程components目录下新建功能文件夹,并新建功能文件,如:system/user/UserList.vue
第六步:授权
- 系统基于VUE动态路由,动态加载系统定义的功能模块,在系统管理界面,进行配置,具体步骤如下:
-
系统菜单管理->新建系统菜单->输入相关数据
注意:
组件路径一栏,以前端系统components 为根目录填写功能模块全路径及文件名(不带后缀)如,/system/user/UserList ,
组件名称一栏,以前端系统components 为根目录填写功能模块全路径及文件名(不带后缀),无第一个/如:system/user/UserList
系统角色管理->新建角色->输入相关数据->勾选菜单。
开发注意事项
1、搜索
目前的搜索条件有
/**
* 等于
*/
public static final String SEARCH_EQ="search_eq_";
/**
* 左模糊
*/
public static final String SEARCH_LLIKE="search_llike_";
/**
* 右模糊
*/
public static final String SEARCH_RLIKE="search_rlike_";
/***
* 全模糊
*/
public static final String SEARCH_LIKE="search_like_";
前端配合:
<input type="text" class="form-filter input-sm_search" name="search_eq_login_name">
只要在 input中 的 name 加入 search_eq_ 前缀 再加数据库中的字段名称即可
2、properties加解密
#SecurityUtil解密,以DES@+密文
spring.datasource.password=DES@faijBM35E5y=
com.platform.common.util.SecurityUtil中加解密
public static void main(String[] args) throws Exception {
System.out.println(encryptDes("root",ENCRYPT_KEY));
System.out.println(decryptDes("faijBM35E5y=",ENCRYPT_KEY));
}
项目运行
--windows jar启动顺序-------------------------------------------------------------------------
#. D:\platform\zookeepe\bin\zkServer.cmd
1. java -jar D:\platform\platform_system_provider\target\platform_system_provider.jar
2. java -jar D:\platform\platform_system_consumer\target\platform_system_consumer.jar
--Linux启动顺序-------------------------------------------------------------------------------
#. /usr/local/zookeeper-3.4.12/bin/zkServer.sh start
1. /opt/fans/consumer_start.sh start
2. /opt/fans/system_provider_start.sh start(可启动多个)
注意:消费者找不到提供者之服务器端采用内网IP
hosts文件 vi /etc/hosts,将本机的名称#hostName#映射到服务器的公网IP
重启注册中心(zookeeper),重启服务提供者
系统截图
项目信息
路漫漫其修远兮,吾将上下而求索
码云:https://gitee.com/javacoo/xPlatform
QQ群:164863067
作者/微信:javacoo
邮箱:xihuady@126.com
下载地址
https://gitee.com/javacoo/xPlatform