# goko **Repository Path**: lsl-gitee/goko ## Basic Information - **Project Name**: goko - **Description**: GOKO 一个能够快速构建Spring Boot项目的Maven手脚架,基于 rdf-component 组件,代码更加简单,欢迎star,关注更新 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-08-24 - **Last Updated**: 2024-08-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GOKO ## 背景 GOKO是基于[rdf-components](https://gitee.com/lsl-gitee/rdf-components)组件搭建的maven手脚架,可快速搭建SpringBoot项目,并实现了 请求响应统一封装、数据库连接、分页查询、异常处理、日志、分布式锁、雪花算法生成id、用户信息管理、登录、注册等功能,以节省你在新建项目中重复的工作。 ## GOKO 设计 ### 1.1 模块设计 | 模块 | 说明 | |--|--| | goko-demo-common | 公共模块,主要包含接口出入参数定义、常量定义、枚举定义、工具类等 | | goko-demo-do | 实体类、数据库表与Java映射类 | | goko-demo-rest-api | rest接口模块,包含项目rest的接口,外部服务接口 | | goko-demo-service | 服务主要业务实现模块,包含项目业务实现逻辑代码 | | *goko-demo-rpc-api | rpc接口模块,包含项目rpc的接口,内部服务间调用接口(待开发) | ### 1.2 请求响应设计 #### 1.2.1 http状态码和内码 ![http状态码和内码设计](https://gitee.com/lsl-gitee/goko/raw/master/files/20210804095227.png) #### 1.2.2 响应封装体 ```java public abstract class BaseResult implements Serializable { protected Long id; /** * 内码 */ protected Integer code; /** * 响应内容数据 */ protected T data; /** * 响应业务子码 */ protected String subCode; /** * 业务错误信息(可在前端展示) */ protected String subMsg; /** * 系统错误信息(一般前端不做展示) */ protected String msg; /** * 请求是否成功标识 */ protected Boolean success; } ``` 如上所示,除了有内码,我们还设计了一个业务子码,业务字码可以自定义,如:`500000`、`INVALID_REQUEST`等,具体的字段解释可看上面的说明, 响应封装体还细分为: - `SuccessResult` : 请求成功返回封装体,返回字段并不包含以上全部字段; - `ErrorResult` : 请求失败返回封装体,返回内容除了以上字段,还包含了`application`、`url`、`date`; - `PageResult` : 分页查询返回封装体,是在`pagehelper`的`PageInfo`类上做了层转换,内容结构于`PageInfo`一致。 这里需要说明的一点是`subMsg`和`msg`的设计,`subMsg`一般为开发人员或者需求要求的错误提示信息,前端可直接展示给用户,而`msg`为系统的异常信息 可供开发人员排查问题时候使用,一般不给用户展示这些内容。 ### 1.3 异常类设计 | 自定义异常类 | 说明 | |--|--| | BaseException | 异常基类,继承于 RuntimeException | | ExpectedException | 可预知异常,继承于 BaseException | | UnexpectedException | 不可预知异常,继承于 BaseException | | BusinessException | 业务异常类,一般业务异常可抛该该类异常,继承于 ExpectedException | | UnauthorizedException | 权限异常,一般权限信息错误时抛出该异常,继承于 BaseException | ### 1.4 日志设计 日志时基于AOP做了前置后置织入,对service接口进行拦截,打印内容包括:`tid、应用名称、机器地址和端口、请求IP、请求URL、请求类型、请求的方法、 请求参数、响应参数(默认不打印,可配置)、接口响应耗时`,同时提供了前置同步回调和后置同步回调接口`LogAdviceCallback`。 ```log [ tid: 1] [app: goko-simple-demo] [addr: *.*.31.18:8808] [reqIp: 127.0.0.1] [reqUrl: http://127.0.0.1:8808/goko/v1/demo/goods/_search | POST] [reqMethod: goko.simple.api.impl.GoodsServiceRestImpl.goodsSearchRest] [reqArgs: [GoodsSearchParam(id=null, name=迷糊条, num=null, status=2, type=OTHER)]] [respTime: 586ms ] ``` ## GOKO Demo 在[demos](https://gitee.com/lsl-gitee/goko/tree/master/demos)目录主要是我们基于[rdf-components](https://gitee.com/lsl-gitee/rdf-components)组件搭建 的简单测试项目和maven原型模板的原始项目(即我们使用Archetype生成的项目结构),同时包含简易版本和简易用户版本,区别是用户版本增加了用户模块, 包含了用户信息的基本管理,用户登录,注册,token信息管理,权限校验等,可直接下载到本地运行,直接看到运行效果。 ### 简易版 - 测试项目: [goko-simple-demo](https://gitee.com/lsl-gitee/goko/tree/master/demos/goko-simple-demo) - maven原型模板: [goko-simple-archetype-pro](https://gitee.com/lsl-gitee/goko/tree/master/demos/goko-simple-archetype-pro) ### 简易用户版 - 未开发,敬请期待~~ - 未开发,敬请期待~~ ## GOKO Archetype 在[goko-archetypes](https://gitee.com/lsl-gitee/goko/tree/master/goko-archetypes)目录主要是我们基于[rdf-components](https://gitee.com/lsl-gitee/rdf-components) 组件搭建的maven原型模板项目(Maven archetype),可直接利用该模板生成你的项目,同样的也会分简易版本和简易用户版本。 ### 简易版 - Maven原型模板项目: [goko-simple-archetype](https://gitee.com/lsl-gitee/goko/tree/master/goko-archetypes/goko-simple-archetype) ### 简易用户版 - 未开发,敬请期待~~ ## 如何使用 **前提:安装并配置好Maven、JDK 1.8+、配置了我们的私服,配置私服的方式[点我](https://gitee.com/lsl-gitee/imvn-repo)** ### 1. 安装Maven Archetype 下载我们的 [goko-simple-archetype](https://gitee.com/lsl-gitee/goko/tree/master/goko-archetypes/goko-simple-archetype) 到本地, 打开cmd小黑窗口进入到 `goko-simple-archetype` 目录,执行 `mvn install` 将模板安装到你的本地maven仓库中。 ### 2. 使用Archetype创建项目 #### 2.1 交互式生成 - 在你需要创建项目的目录下打开cmd命令窗口,输入命令 `mvn archetype:generate -DarchetypeCatelog=local`回车,如果我们的模板安装成功了,你就可以在 Choose archetype: 列表中看到我们的archetype : ```shell script 14: local -> goko.simple:goko-simple-archetype-pro-archetype (基于rdf-components组件库搭建的简单项目的maven原型项目) ``` - 输入我们的archetype序号,如 14 回车: ```shell script Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 7: 14 ``` - 然后就是输入我们创建项目的一些信息了,包括:`groupId # 生成项目的groupId`、 `artifactId # 生成项目名称`、 `version # 生成项目版本号`、 `package # 生成项目基础包路径`: ```shell script Define value for property 'groupId': com.goko Define value for property 'artifactId': goko-demo-project Define value for property 'version' 1.0-SNAPSHOT: : 1.0.0-release Define value for property 'package' com.goko: : com.goko.order ``` 可以看到,version和package输入的时候多了一个 : 冒号,意思是它提供了默认值,可以直接回车使用默认值,不用输入。 - 最后输入确认 Y 就可以创建了: ```shell script Confirm properties configuration: groupId: com.goko artifactId: goko-demo-project version: 1.0.0-release package: com.goko.order Y: : Y [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: goko-simple-archetype-pro-archetype:1.0.0-RELEASE [INFO] ---------------------------------------------------------------------------- [INFO] ... 省略内容 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 06:25 min [INFO] Finished at: 2021-08-19T11:41:22+08:00 [INFO] ------------------------------------------------------------------------ ``` 大功告成,你会发现当前目录多了一个`goko-demo-project`项目。 #### 2.2 直接命令生成 - 同样的,打开cmd命令窗口,直接输入生成命令: ```shell script mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId="goko.simple" -DarchetypeArtifactId=goko-simple-archetype-pro-archetype -DgroupId="com.goko" -DartifactId=goko-demo-project2 -Dversion="1.0.0-SNAPSHOT" -Dpackage="com.goko.user" ``` - 参数说明: >-DinteractiveMode 交互模式,即是否在终端通过交互方式生成项目 \ >-DarchetypeGroupId 原型模板groupId,原型主要包路径 \ >-DarchetypeArtifactId 原型模板artifactId,即选择的原型的名称 \ >-DgroupId 生成项目的groupId,即生成项目的主要包路径 \ >-DartifactId 生成项目的artifactId,即项目的名称 \ >-Dversion 生成项目的版本号 \ >-Dpackage 生成项目的包路径 #### 2.3 整合到IDEA - 可以通过`maven archetype catalogs`这个插件直接将我们的模板直接整合到IDEA中,在New Maven项目的时候,可以直接选择我们的模板进行创建,跟IDEA自带的一样。 ### 3. 效果 - 用IDEA打开: ![生成项目结构](https://gitee.com/lsl-gitee/goko/raw/master/files/20210819142834.png) - 直接找到我们的启动类`GokoApplication`右键启动: ```text ... 省略 2021-08-19 14:29:23,822 [INFO ] [main] [ Tomcat started on port(s): 8808 (http) with context path '' ] 2021-08-19 14:29:23,829 [INFO ] [main] [ Started GokoApplication in 1.667 seconds (JVM running for 2.131) ] ``` 完美!启动成功! 这样我们就可以直接开发我们的业务逻辑代码了,无需再封装了。 ## 交流 >当前框架由个人进行开发和维护,发现问同题或有优化建议可通官方QQ群或Issue留言告知本人,框架的更新动态会第一时间在QQ群里通知,时也能得到本人的即时响应,欢迎大家进群讨论。 - 官方QQ群:1083977145 - 官方邮箱:lsl.yx@foxmail.com ![QQ群号:1083977145](https://gitee.com/lsl-gitee/LDevKit/raw/feature-1.1.0/MybatisHelperPro/img/qq_group.png "QQ群号:1083977145") ## 投喂 > 你的红包将是我掉头发(我会熬更多夜去完善它)的最大动力!!! - [支付宝投喂](https://gitee.com/lsl-gitee/LDevKit/raw/master/MybatisHelperPro/img/alipay.jpg) - [微信投喂](https://gitee.com/lsl-gitee/LDevKit/raw/master/MybatisHelperPro/img/weiChatPay.png)