微服务项目开发规范

1.项目命名:
xx-xx/xx-xx-xx

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

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

2项目划分
mes-base 共有基础模块,抽出共用实体,共用工具类等

mes-discovery服务注册中心

mes-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
对应包名

 <groupId>com.kaicom.mes.xx</groupId>

项目名
<artifactId>mes-user</artifactId>

版本
<version>1.0-RELEASE</version>

统一引入springboot 2.0.1.RELEASE版本,springcloud Finchley.RELEASE版本
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

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

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

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

<dependency>
    <groupId>com.kaicom.mes</groupId>
    <artifactId>mes-base</artifactId>
    <version>1.0-RELEASE</version>
</dependency>

使用内网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<User> list = (Page<User>) userService.queryUsers();

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

 

10 不同模块服务调用
统一使用Feign进行服务调用,在feign下新建feign客户端如UserFeginClient.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其他待补充

发表新评论