微服务项目开发规范

 

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
       

   



    UTF-8
    UTF-8
    1.8

注释: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类命名规范

  1. 常量类

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其他待补充

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)