Hzero目的是沉淀大量通用標(biāo)準(zhǔn)組件桨啃、服務(wù)踩蔚,目標(biāo)是搭建各種產(chǎn)品快速組件不瓶、開發(fā)的融合平臺(tái)禾嫉,減少成本浪費(fèi)。
Hzero代碼體系
- 代碼架構(gòu)
- hzero-parent 同一管理所有組件蚊丐、服務(wù)版本
- hzero-starter 基礎(chǔ)通用組件(源碼開發(fā))
- choerodon-starter 豬齒魚基礎(chǔ)組件(開源)
- hzero-boot 客戶端組件
- hzero-plugin 服務(wù)插件
- hzero-service 服務(wù)(可依賴包)
- hzero-resource 建表腳本及初期數(shù)據(jù)
- hzero-front 前端工程
Hzero基礎(chǔ)服務(wù)架構(gòu)
- hzero基礎(chǔ)服務(wù)
- hzero-register 注冊(cè)中心(多版本支持)
- hzero-config 配置中心中心(多版本支持)
- hzero-gatway 網(wǎng)關(guān)服務(wù)熙参,合并hzero-gateway-helper鑒權(quán)
- hzero-oauth 認(rèn)證服務(wù)
- hzero-swaggr API測(cè)試服務(wù)
- hzero-iam 用戶身份服務(wù)
- 訪問(wèn)網(wǎng)關(guān)、鑒權(quán)
-
API訪問(wèn)gateway網(wǎng)關(guān)服務(wù)麦备,所有請(qǐng)求都會(huì)經(jīng)過(guò)GateWayHelperFilter過(guò)濾器孽椰,在過(guò)濾器中,會(huì)調(diào)用gateway-helper鑒權(quán)凛篙。進(jìn)入gateway-helper黍匾,根過(guò)濾器RootServletFilter包含了一系列過(guò)濾器來(lái)對(duì)請(qǐng)求進(jìn)行鑒權(quán),將按途中的過(guò)濾器順序進(jìn)行校驗(yàn)呛梆,其中任何一步返回false都會(huì)直接返回锐涯,一般服務(wù)出現(xiàn)403、500等問(wèn)題可先檢查hzero-gateway-helper的日志削彬,看是哪一步校驗(yàn)不通過(guò)全庸。校驗(yàn)通過(guò)后攜帶jwt返回到gatewaya
-
API訪問(wèn)gateway網(wǎng)關(guān)服務(wù)麦备,所有請(qǐng)求都會(huì)經(jīng)過(guò)GateWayHelperFilter過(guò)濾器孽椰,在過(guò)濾器中,會(huì)調(diào)用gateway-helper鑒權(quán)凛篙。進(jìn)入gateway-helper黍匾,根過(guò)濾器RootServletFilter包含了一系列過(guò)濾器來(lái)對(duì)請(qǐng)求進(jìn)行鑒權(quán),將按途中的過(guò)濾器順序進(jìn)行校驗(yàn)呛梆,其中任何一步返回false都會(huì)直接返回锐涯,一般服務(wù)出現(xiàn)403、500等問(wèn)題可先檢查hzero-gateway-helper的日志削彬,看是哪一步校驗(yàn)不通過(guò)全庸。校驗(yàn)通過(guò)后攜帶jwt返回到gateway
Hzero本地部署(準(zhǔn)備工作)參考文檔
-
本地部署
本地安裝方式一般用于搭建開發(fā)環(huán)境,在服務(wù)器上部署好基礎(chǔ)服務(wù)后融痛,開發(fā)人員在本地只需要關(guān)注自己的服務(wù)壶笼,進(jìn)行API測(cè)試。在本地電腦安裝6個(gè)基礎(chǔ)服務(wù)搭建起基礎(chǔ)開發(fā)環(huán)境雁刷。
-
基礎(chǔ)服務(wù)
- hzero-register 注冊(cè)中心
- hzero-config 配置中心
- hzero-gateway 網(wǎng)關(guān)服務(wù)
- hzero-oauth 認(rèn)證服務(wù)
- hzero-swaggr API測(cè)試服務(wù)
- hzero-iam 用戶身份服務(wù)
-
環(huán)境準(zhǔn)備
- 基礎(chǔ)環(huán)境:
- JDK1.8
- Maven3.0+
- Redis
- 數(shù)據(jù)庫(kù)
- Hosts域名映射
- 虛擬機(jī)地址 db.hzero.org
- 虛擬機(jī)地址 redis.hzero.org
- 127.0.0.1 dev.hzero.org
- 基礎(chǔ)環(huán)境:
Hzero本地部署(數(shù)據(jù)庫(kù)初始化)
-
數(shù)據(jù)初始化
-
創(chuàng)建用戶
create user 'hzero'@'%' identified by 'hzero'
-
創(chuàng)建庫(kù)
create database hzero_platform default character set utf8mb4
create database hzero_governace default character set utf8mb4
grant all privileges on hzero_platform.* to 'hzero'@'%'
grant all privileges on hzero_governance.* to 'hzero'@'%'
flush privileges
-
初始化表結(jié)構(gòu)
修改腳本文件覆劈,需要注意的是先要看jar包的對(duì)應(yīng)目錄是否存在,再修改數(shù)據(jù)庫(kù)連接信息沛励,再根據(jù)你是要初始化表結(jié)構(gòu)(service值需要替換责语、dir也要替換;替換的目錄是建表腳本的目錄)還是初始化數(shù)據(jù)替換service和dir目派。如下就是初始化hzero_platform庫(kù)中的表結(jié)構(gòu)坤候。
service=hzero_platform schema=$service dir=groovy/$service
初始化數(shù)據(jù)
表更新規(guī)范
-
‘0’租戶處理
手工修改fd_organization hpfm_tenant hpfm_group三張表的數(shù)據(jù),需手動(dòng)將Hzero這個(gè)租戶的id設(shè)置為0
-
Hzero項(xiàng)目demo 后端項(xiàng)目搭建教程
- 先看項(xiàng)目骨架:四層架構(gòu)
)企蹭。
應(yīng)用分層
至少需要包含如下的結(jié)構(gòu)白筹,將業(yè)務(wù)和流程分開智末,應(yīng)用服務(wù)專注用例調(diào)度,反應(yīng)用戶故事徒河;領(lǐng)域?qū)ο?服務(wù)專注核心業(yè)務(wù)系馆。整個(gè)模塊通用的放到基礎(chǔ)設(shè)施層,資源庫(kù)和外部服務(wù)實(shí)現(xiàn)也放到基礎(chǔ)設(shè)施層顽照,屏蔽實(shí)現(xiàn)細(xì)節(jié)由蘑。- api 向外提供接口
- app 負(fù)責(zé)用例調(diào)度,事務(wù)控制
- domain 領(lǐng)域?qū)ο蠛皖I(lǐng)域服務(wù)代兵,專注核心業(yè)務(wù)
- infra 基礎(chǔ)設(shè)施尼酿,保持?jǐn)?shù)據(jù)的持久化、防腐層奢人、第三方庫(kù)谓媒、消息等
- api
- controller 提供接口服務(wù)
- dto 用來(lái)封裝復(fù)雜的數(shù)據(jù)對(duì)象,多用來(lái)給需要多個(gè)實(shí)體組合時(shí)提供數(shù)據(jù)傳輸
- app
- service 應(yīng)用服務(wù)何乎,事務(wù)控制句惯、流程調(diào)度
- impl 實(shí)現(xiàn)
- assembler dto組裝器
- service 應(yīng)用服務(wù)何乎,事務(wù)控制句惯、流程調(diào)度
- domain
- entity 表的體現(xiàn),能簡(jiǎn)單自治(限制長(zhǎng)度支救,限制主鍵等等)
- service 封裝領(lǐng)域內(nèi)復(fù)雜的業(yè)務(wù)邏輯
- repository 資源庫(kù)接口抢野,提供數(shù)據(jù)資源的操作方法,簡(jiǎn)單的增刪改查和redis的增刪查改
- vo 值對(duì)象各墨,封裝沒有實(shí)體但是又會(huì)在領(lǐng)域內(nèi)用的數(shù)據(jù)
- infra
- mapper 接口
- repository.impl repository的實(shí)現(xiàn)指孤,業(yè)務(wù)不能入侵到這里
開發(fā)步驟
- 實(shí)體
- 類繼承AuditDomain,添加@ModifyAudit贬堵、@VersionAudit恃轩、@Table、@JsonInclude(JsonInclude.Include.NON_NULL)黎做、@ApiModel注解叉跛。
- 與該表對(duì)應(yīng)的屬性添加注解@Id、@GeneratedValue蒸殿、@NotNull筷厘、@ApiModelProperty、@Length
- 非該表屬性宏所,但是能用到的添加@Transient酥艳、@ApiModelProperty注解
代碼如下:
package com.hzero.test.domaindriverdesign.domain.entity;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.choerodon.mybatis.annotation.ModifyAudit;
import io.choerodon.mybatis.annotation.VersionAudit;
import io.choerodon.mybatis.domain.AuditDomain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import java.util.UUID;
/**
* @date 2019/7/30
*/
@ApiModel("任務(wù)信息")
@ModifyAudit
@VersionAudit
@Table(name = "todo_task")
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Task extends AuditDomain {
public static final String FIELD_ID = "id";
public static final String FIELD_EMPLOYEE_ID = "employeeId";
public static final String FIELD_STATE = "state";
public static final String FIELD_TASK_DESCRIPTION = "taskDescription";
@Id
@GeneratedValue
private Long id;
@NotNull(message = "用戶ID不能為空")
@ApiModelProperty("用戶ID")
private Long employeeId;
@ApiModelProperty("任務(wù)狀態(tài)")
private String state;
@ApiModelProperty("任務(wù)編號(hào)")
private String taskNumber;
@Length(max = 240)
@ApiModelProperty("任務(wù)描述")
private String taskDescription;
@NotNull
@ApiModelProperty("租戶ID")
private Long tenantId;
@Transient
@ApiModelProperty("員工編號(hào)")
private String employeeNumber;
@Transient
@ApiModelProperty("員工姓名")
private String employeeName;
/**
* 生成任務(wù)編號(hào)
*/
public void generateTaskNumber() {
this.taskNumber = UUID.randomUUID().toString().replace("-", "");
}
}
- 資源庫(kù)(repository)
- 都是接口,接口繼承BaseRepository<>接口爬骤,BaseRepository中提供了一些基本的crud方法
- controller中能直接調(diào)用這里的接口充石,不用再app中service里再封裝
- 開發(fā)服務(wù)(app.service)
- 開發(fā)controller(controller)
- 開發(fā)mapper和mapper.xml(mapper)
- 一般單表操作使用jpa就夠了
- 資源庫(kù)實(shí)現(xiàn)(repository.impl)
- 應(yīng)用服務(wù)實(shí)現(xiàn)(service.impl)