xPlatform 一个基于Springboot2.X+Dubbo2.6.x的快速开发框架

xPlatform

一个基于Springboot2.X+Dubbo2.6.x的后台快速开发框架

介绍

说明

与Platform_admin搭配(前后端分离),支持分布式部署

架构说明

整体逻辑架构

总体设计思想:

  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依赖:需要依赖接口公共模块

    <dependency>
       <groupId>com.platform</groupId>
       <artifactId>platform_common_api</artifactId>
       <version>${project.version}</version>
    </dependency>
    
  2. entity定义:使用mybatisplus注解,并继承DataEntity<实体类>>,如:

    @TableName("sys_company")
    public class SysCompany extends DataEntity<SysCompany>
    
  3. service定义:继承IBaseService<实体类>>,如:

    public interface ISysCompanyService extends IBaseService<SysCompany>
    
第三步:服务提供者定义
  1. 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> 
    
  2. dao定义:继承CrudDao<实体类>,如:

    public interface SysCompanyDao extends CrudDao<SysCompany>
    
  3. service接口实现定义:继承BaseServiceImpl<dao定义, 实体类>,实现服务接口,如:

    @Component
    @Transactional(readOnly = true,rollbackFor = Exception.class)
    @Service(interfaceClass = ISysCompanyService.class)
    public class SysCompanyService extends BaseServiceImpl<SysCompanyDao, SysCompany> implements ISysCompanyService 
    
第四步:服务消费者定义
  1. 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> 
    
  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 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),重启服务提供者

系统截图

图片.png

图片.png

图片.png

图片.png

图片.png

图片.png
项目信息
路漫漫其修远兮,吾将上下而求索
码云:https://gitee.com/javacoo/xPlatform
QQ群:164863067
作者/微信:javacoo
邮箱:xihuady@126.com
下载地址

https://gitee.com/javacoo/xPlatform

更新日志
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容