微服务配置中心 Apollo解析——Portal 创建 App

本文详细解析Apollo微服务配置中心中创建App的流程,涉及Portal、Admin Service,涵盖App实体结构、逻辑删除、Portal侧创建操作及与Admin Service的同步机制。文章深入探讨了App创建的原因,AppService与AppRepository的交互,以及事件监听和Admin Service API的使用。
摘要由CSDN通过智能技术生成
  • 1. 概述
  • 2. App
  • 3. Portal 侧
  • 4. Admin Service 侧
  • 666. 彩蛋

1. 概述

本文分享 Portal 创建 App 的流程,整个过程涉及 Portal、Admin Service ,如下图所示:

微服务配置中心 Apollo 源码解析——Portal 创建 App

流程

下面,我们先来看看 App 的实体结构

老艿艿:因为 Portal 是管理后台,所以从代码实现上,和业务系统非常相像。也因此,本文会略显啰嗦。

2. App

在 apollo-common 项目中,
com.ctrip.framework.apollo.common.entity.App ,继承 BaseEntity 抽象类,应用信息实体。代码如下:

@Entity
@Table(name = "App")
@SQLDelete(sql = "Update App set isDeleted = 1 where id = ?")
@Where(clause = "isDeleted = 0")
public class App extends BaseEntity {
 /**
 * App 名
 */
 @Column(name = "Name", nullable = false)
 private String name;
 /**
 * App 编号
 */
 @Column(name = "AppId", nullable = false)
 private String appId;
 /**
 * 部门编号
 */
 @Column(name = "OrgId", nullable = false)
 private String orgId;
 /**
 * 部门名
 *
 * 冗余字段
 */
 @Column(name = "OrgName", nullable = false)
 private String orgName;
 /**
 * 拥有人名
 *
 * 例如在 Portal 系统中,使用系统的管理员账号,即 UserPO.username 字段
 */
 @Column(name = "OwnerName", nullable = false)
 private String ownerName;
 /**
 * 拥有人邮箱
 *
 * 冗余字段
 */
 @Column(name = "OwnerEmail", nullable = false)
 private String ownerEmail;
}
  • ORM 选用 Hibernate 框架。
  • @SQLDelete(…) + @Where(…) 注解,配合 BaseEntity.extends 字段,实现 App 的逻辑删除
  • 字段比较简单,胖友看下注释。

2.1 BaseEntity


com.ctrip.framework.apollo.common.entity.BaseEntity ,基础实体抽象类。代码如下:

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity {
 /**
 * 编号
 */
 @Id
 @GeneratedValue
 @Column(name = "Id")
 private long id;
 /**
 * 是否删除
 */
 @Column(name = "IsDeleted", columnDefinition = "Bit default '0'")
 protected boolean isDeleted = false;
 /**
 * 数据创建人
 *
 * 例如在 Portal 系统中,使用系统的管理员账号,即 UserPO.username 字段
 */
 @Column(name = "DataChange_CreatedBy", nullable = false)
 private String dataChangeCreatedBy;
 /**
 * 数据创建时间
 */
 @Column(name = "DataChange_CreatedTime", nullable = false)
 private Date dataChangeCreatedTime;
 /**
 * 数据最后更新人
 *
 * 例如在 Portal 系统中,使用系统的管理员账号,即 UserPO.username 字段
 */
 @Column(name = "DataChange_LastModifiedBy")
 private String dataChangeLastModifiedBy;
 /**
 * 数据最后更新时间
 */
 @Column(name = "DataChange_LastTime")
 private Date dataChangeLastModifiedTime;
 /**
 * 保存前置方法
 */
 @PrePersist
 protected void prePersist() {
 if (this.dataChangeCreatedTime == null) dataChangeCreatedTime = new Date();
 if (this.dataChangeLastModifiedTime == null) dataChangeLastModifiedTime = new Date();
 }
 /**
 * 更新前置方法
 */
 @PreUpdate
 protected void preUpdate() {
 this.dataChangeLastModifiedTime = new Date();
 }
 /**
 * 删除前置方法
 */
 @PreRemove
 protected void preRemove() {
 this.dataChangeLastModifiedTime = new Date();
 }
 // ... 省略 setting / getting 方法
} 
  • @MappedSuperclass 注解,见 《Hibernate 中 @MappedSuperclass 注解的使用说明》 文章。
  • @Inheritance(…) 注解,见 《Hibernate(11)映射继承关系二之每个类对应一张表(@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)》 文章。
  • id 字段,编号,Long 型,全局自增。
  • isDeleted 字段,是否删除,用于逻辑删除的功能。
  • dataChangeCreatedBy 和 dataChangeCreatedTime 字段,实现数据的创建人和时间的记录,方便追踪。
  • dataChangeLastModifiedBy 和 dataChangeLastModifiedTime 字段,实现数据的更新人和时间的记录,方便追踪。
  • @PrePersist、@PreUpdate、@PreRemove 注解,CRD 操作前,设置对应的时间字段
  • 在 Apollo 中,所有实体都会继承 BaseEntity ,实现公用字段统一定义。这种设计值得借鉴,特别是创建时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值