微服務專案開發規範
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
對應包名
<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優化
使用者名稱/密碼: 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客戶端如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: 錯誤資訊。
對關鍵操作必須進行日誌列印,如使用者修改密碼,賦予管理員許可權等。