xx-xx/xx-xx-xx
项目名-模块名/项目名-模块名-二级模块名
大小写:全部小写,单词间使用-连接
mes-base 共有基础模块,抽出共用实体,共用工具类等
mes-discovery-eureka 服务注册中心
mes-api-gateway 网关
mes-config 配置中心
mes-user 用户模块
mes-equipment 设备管理模块
等等,具体根据业务做具体划分
com.kaicom.mes.xx
xx:模块名
com.kaicom.mes.xx下有以下包
config/配置类 Xx
controller/接口
dao/mybatis映射接口类
enums/枚举类
model/数据库表对应实体类
model/vm/请求体实体类
model/dto/返回体实体类
service/业务代码
util/工具类
feign/调用其他模块接口的客户端和工厂类
XxXxApplication.java 启动类,XxXx为模块名和二级模块名
Resource下常用静态资源:
application.properties 公用配置文件
application-dev.properties 开发环境配置文件
application-test.properties 测试环境配置文件
application-prod.properties 正式环境配置文件
mapper/*.xml mybatis数据库操作映射文件
其他配置xx.properties文件可自定义,可使用PropertySource进行使用,使用场景:其他自定义配置。尽量少用。
包名同src/main/java,同级目录建立测试类。Xx.java可以建立XxTest.java使用SpringBootTest进行测试
对应包名
项目名
版本
统一引入springboot 2.0.1.RELEASE版本,springcloud Finchley.RELEASE版本
注释:springcloud Finchley.RELEASE官方文档 :
http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#
各模块均需引入共有基础模块
使用内网maven库进行引入
Constants.java
常量必须添加注释
2)配置类
XxConfig.java
配置类命名必须要与技术名称一致,如SwaggerConfig.java
自定义xx.properties使用类
XxProperties.java 类名与文件名一致
3)controller
XxController.java
严格避免业务代码侵入
4)dao
XxMapper.java Xx对应实体名称
5)enums
Xx.java 必须添加枚举类注解
6)model
vm/XxVm.java
根据数据库表名建立实体类Xx.java
7)service
XxService.java 方法必须注释
impl/XxServiceImpl.java 具体实现类
8)mapper/Xx.xml
使用mybatis-gengerator进行自动生成,生成必须包含根据主键进行增删改查的方法。
请求方式:
get查询 put修改 post添加 delete删除
restful路径命名规则参考:
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
XxVm.java
属性值注释:@ApiModelProperty("用户名")
参数校验,message为错误提示信息
@NotNull(message = "用户名不能为空")
@Size(min = 5,max = 10,message = "用户名长度应在5-10位之间")
校验类型详情查看源码:javax.validation.constraints
XxController.java
接口类注释:
@Api(description = "用户")
具体接口方法注释:
@ApiOperation("认证,返回token")
使用@Valid启用校验
public RtData login(@Valid @RequestBody LoginVm loginVm, BindingResult bindingResult) {
//判断是否满足校验规则,否则返回封装的返回体
if(bindingResult.hasErrors()){
return ResponseBuilder.build(RtCode.ILLEGAL_REQUEST);
}
swagger接口文档:http://localhost:port/swagger-ui.html#/
访问地址:http://localhost:8080/druid/login.html
用户名/密码: druid/druid (在 application.properties进行配置)
点击sql监控可以查看查询比较慢的sql语句,对应优化
controller中统一使用RtData组装返回给客户端的具体内容
在mes-base中封装了返回体和返回代码,使用ResponseBuild生成RtData,
RtData包含code(返回代码) msg(提示信息,如错误信息) data(具体返回实体),枚举类中已经列出常用的返回代码:
SUCCESS(200, "请求成功"),
ILLEGAL_REQUEST(400, "非法请求"),
NOT_AUTHORIZATION(401, "未授权"),
NOT_SUCCESS(402, "请求失败"),
ILLEGAL_PARAM(403, "参数异常"),
FALL_BACK(405, "断路返回"),
SERVER_ERROR(500, "服务器异常");
前端和消费者可以根据RtCode判断服务器返回状态。
使用PageVm接收分页参数 pageNum(页数)和pageSize(数据条数),然后使用 PageHelper进行分页查询
PageHelper.startPage(page.getPageNum(),page.getPageSize());
Page
实现原理:Mybatis拦截器对分页参数进行注入
统一使用Feign进行服务调用,在feign下新建feign客户端如UserFegin.java,注解标明调用的服务名称和具体接口路径,使用UserFeignFactory.java进行断路器返回和日志统一处理。注意断路器中返回的 RtCode为FALL_BACK,避免误认为正常返回。详情参照mes-equipment项目中UserFegin.java和UserFeignFactory.java的具体实现。
统一使用:
private static final Logger logger = LoggerFactory.getLogger(xx.class);
info: 重要提示信息
warn:警示信息。
error: 错误信息。
对关键操作必须进行日志打印,如用户修改密码,赋予管理员权限等。