微服务项目开发规范

1.项目命名:

xx-xx/xx-xx-xx

项目名-模块名/项目名-模块名-二级模块名

大小写:全部小写,单词间使用-连接

2项目划分

mes-base 共有基础模块,抽出共用实体,共用工具类等

mes-discovery-eureka 服务注册中心

mes-api-gateway 网关

mes-config 配置中心

mes-user 用户模块

mes-equipment 设备管理模块

等等,具体根据业务做具体划分

3包命名:

com.kaicom.mes.xx

xx:模块名

4目录结构:

1)src/main/java下
com.kaicom.mes.xx下有以下包

config/配置类 Xx

controller/接口

dao/mybatis映射接口类

enums/枚举类

model/数据库表对应实体类

model/vm/请求体实体类

model/dto/返回体实体类

service/业务代码

util/工具类

feign/调用其他模块接口的客户端和工厂类

XxXxApplication.java 启动类,XxXx为模块名和二级模块名

2)Src/main/Resource为静态资源目录
Resource下常用静态资源:

application.properties 公用配置文件

application-dev.properties 开发环境配置文件

application-test.properties 测试环境配置文件

application-prod.properties 正式环境配置文件

mapper/*.xml mybatis数据库操作映射文件

其他配置xx.properties文件可自定义,可使用PropertySource进行使用,使用场景:其他自定义配置。尽量少用。

3)src/test/java
包名同src/main/java,同级目录建立测试类。Xx.java可以建立XxTest.java使用SpringBootTest进行测试

4)pom.xml
对应包名

com.kaicom.mes.xx

项目名
mes-user

版本
1.0-RELEASE

统一引入springboot 2.0.1.RELEASE版本,springcloud Finchley.RELEASE版本

org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE




org.springframework.cloud
spring-cloud-dependencies
Finchley.RELEASE
pom
import




<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>

注释:springcloud Finchley.RELEASE官方文档 :

http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#

各模块均需引入共有基础模块

com.kaicom.mes mes-base 1.0-RELEASE

使用内网maven库进行引入

5类命名规范

常量类
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进行自动生成,生成必须包含根据主键进行增删改查的方法。

6接口说明(请求方式、注释、参数校验)

请求方式:

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#/

7druid使用与sql优化

访问地址:http://localhost:8080/druid/login.html

用户名/密码: druid/druid (在 application.properties进行配置)

点击sql监控可以查看查询比较慢的sql语句,对应优化

8返回实体解释

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判断服务器返回状态。

9分页插件的使用

使用PageVm接收分页参数 pageNum(页数)和pageSize(数据条数),然后使用 PageHelper进行分页查询

PageHelper.startPage(page.getPageNum(),page.getPageSize());
Page list = (Page) userService.queryUsers();

实现原理:Mybatis拦截器对分页参数进行注入

10 不同模块服务调用

统一使用Feign进行服务调用,在feign下新建feign客户端如UserFegin.java,注解标明调用的服务名称和具体接口路径,使用UserFeignFactory.java进行断路器返回和日志统一处理。注意断路器中返回的 RtCode为FALL_BACK,避免误认为正常返回。详情参照mes-equipment项目中UserFegin.java和UserFeignFactory.java的具体实现。

11日志打印

统一使用:

private static final Logger logger = LoggerFactory.getLogger(xx.class);

info: 重要提示信息

warn:警示信息。

error: 错误信息。

对关键操作必须进行日志打印,如用户修改密码,赋予管理员权限等。

12其他待补充

参考资料
https://blog.csdn.net/programmeryu/article/details/81333607

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值