# xPlatform **Repository Path**: javacoo/xPlatform ## Basic Information - **Project Name**: xPlatform - **Description**: xPlatform一个基于Springboot2.X+Dubbo2.6.x的快速开发框架,前端:vuejs2.0+element-ui 2.x后端:- 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 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 7 - **Created**: 2018-12-04 - **Last Updated**: 2022-10-26 ## Categories & Tags **Categories**: webframework **Tags**: None ## README # xPlatform > 一个基于Springboot2.X+Dubbo2.6.x的后台快速开发框架 ## 介绍 ### 说明  与Platform_admin搭配(前后端分离),支持分布式部署 ### 架构说明 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0528/084415_d296cf74_121703.png "屏幕截图.png") 总体设计思想: 1. xPlatfrom是基于SpringBoot+Dubbo+VUE构建的一个前后端分离的快速开发平台,旨在为项目组提供一套快速,高效,稳定,规范的开发框架,以适应当前快速迭代的开发任务。 2. xPlatfrom提供前后端开发框架,前端主要基于VUE,利用VUE动态路由,动态加载系统定义的功能模块,将各个子系统集成,形成一个统一的运营管理平台。后端主要采用SpringBoot+Dubbo开发模式,各子系统依赖框架提供的基础包只需要实现具体业务功能即可,相关基础服务,如持久化,缓存,安全,日志,文件上传下载等都由框架提供。 3. xPlatfrom是前后端分离支持分布式部署的,前端部署在静态服务器即可,如Nginx。后端分服务消费者和服务提供者,服务消费者即服务控制层是前端请求的入口,可部署多个,通过Nginx做负载均衡。服务提供者实现具体业务逻辑,是业务处理的核心,为服务消费者提供具体服务,可部署多个,由Dubbo提供服务治理功能。 4. 基于以上实现便可构建一个前后端分离,分布式部署,动态扩展的应用系统。 ### 项目结构 ``` 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文件夹中。 1. 页面如果是列表类型的。页面的文件名用UserList.vue命名。 ### controller、service、dao方法名称约定 1. 如果是增加数据操作用insert做前缀。 2. 如果是删除操作用delete做前缀 3. 如果是修改操作用update做前缀 4. 如果是查询操作用select做前缀 # 新建一个功能模块 ##### 第一步:数据库定义 生成基础代码 ##### 第二步:接口定义 1. pom依赖:需要依赖接口公共模块 ``` com.platform platform_common_api ${project.version} ``` 2. entity定义:使用mybatisplus注解,并继承DataEntity<实体类>>,如: ``` @TableName("sys_company") public class SysCompany extends DataEntity ``` 3. service定义:继承IBaseService<实体类>>,如: ``` public interface ISysCompanyService extends IBaseService ``` ##### 第三步:服务提供者定义 1. pom依赖:需要依赖服务提供者公共模块,业务接口模块 ``` com.platform platform_system_api ${project.version} com.platform platform_common_provider ${project.version} ``` 2. dao定义:继承CrudDao<实体类>,如: ``` public interface SysCompanyDao extends CrudDao ``` 3. service接口实现定义:继承BaseServiceImpl,实现服务接口,如: ``` @Component @Transactional(readOnly = true,rollbackFor = Exception.class) @Service(interfaceClass = ISysCompanyService.class) public class SysCompanyService extends BaseServiceImpl implements ISysCompanyService ``` ##### 第四步:服务消费者定义 1. pom依赖:需要依赖服务消费者公共模块,业务接口模块 ``` com.platform platform_system_api ${project.version} com.platform platform_common_consumer ${project.version} ``` 2. controller定义:继承BaseController,如: ``` @Controller @RequestMapping(value = "/sys/user") public class SysUserController extends BaseController{ @Reference private ISysUserService sysUserService; .... } ``` ##### 第五步:定义列表页面 1. 需要在前端工程components目录下新建功能文件夹,并新建功能文件,如:system/user/UserList.vue ##### 第六步:授权 - 系统基于VUE动态路由,动态加载系统定义的功能模块,在系统管理界面,进行配置,具体步骤如下: 1. 系统菜单管理->新建系统菜单->输入相关数据 注意: 组件路径一栏,以前端系统components 为根目录填写功能模块全路径及文件名(不带后缀)如,/system/user/UserList , 组件名称一栏,以前端系统components 为根目录填写功能模块全路径及文件名(不带后缀),无第一个/如:system/user/UserList 2. 系统角色管理->新建角色->输入相关数据->勾选菜单。 # 开发注意事项 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中 的 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)); } ``` ## 项目运行 ``` bash --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://images.gitee.com/uploads/images/2020/0528/082621_e46b8891_121703.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0528/082658_ca7c8de5_121703.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0528/082721_751ea405_121703.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0528/082736_11274c9a_121703.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0528/082745_edcd842c_121703.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0528/082757_7ad55698_121703.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0528/082804_b9c2c68a_121703.png "屏幕截图.png") ##### 项目信息 ``` 路漫漫其修远兮,吾将上下而求索 码云:https://gitee.com/javacoo/xPlatform QQ群:217690017 作者:javacoo 邮箱:xihuady@126.com ``` ##### 更新日志