java - 如何在 spring-boot 中使用微服务开发 Web 应用程序以获取通用代码和关系
问题描述
我将使用 spring-boot 和 spring-data-jpa 开发小型 Web 应用程序以了解微服务架构。
在初始阶段,我只有 2 个实体 (1) CountryEntity 和 (2) StateEntity。在我已经拥有的整体结构中,这两个实体之间存在关系,例如:
国家实体:
@Entity
@Data
@EqualsAndHashCode(callSuper=false)
public class CountryEntity extends BaseEntity{
private String countryCode;
private String country;
@OneToMany(mappedBy = "country", orphanRemoval = true, cascade = CascadeType.ALL)
private Set<StateEntity> stateEntities;
}
状态实体:
@Entity
@Data
@EqualsAndHashCode(callSuper=false)
public class StateEntity extends BaseEntity {
private String stateCode;
private String state;
@ManyToOne
private Country country;
}
另外,请注意我扩展了 BaseEntity ,其中包含以下共享字段:
基本实体:
@MappedSuperclass
@Data
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Date createdDateTime;
private Date updatedDateTime;
private Boolean isActive;
private Boolean isDelete;
@PrePersist
private void setCreatedDateTime() {
this.createdDateTime = new Date();
this.isActive = true;
this.isDelete = false;
}
@PreUpdate
private void setUpdatedDateTime() {
this.updatedDateTime = new Date();
}
}
现在,在将上述单体结构转换为微服务时,我有 2 个查询,如下所述:
1.我应该为上面定义的 BaseEntity 和其他类(如常量、实用程序等)创建共享库(共享代码的单独微服务,然后在所有不同的微服务应用程序中添加依赖项)吗?或者我应该重复所有微服务中的所有代码?请指导,因为一些网站建议共享库,一些专家建议不要使用共享库并建议重复所有代码。我应该为更好的架构做些什么。
2.如何在微服务架构中给出上述2个实体之间的关系?我经历了一些问题,一些反馈说这是不可能的。然后我有一个应用程序,其中所有实体都直接或间接地处于关系中。在这里,我只是以原始应用程序为例。我知道它必须是某种结构或某种方式,我可以通过它应用关系。请指导我。
非常感谢你。
解决方案
当您在微服务架构中工作时,您应该将所有常用代码放入一个shared
模块中。该模块可以作为库部署到您的 Maven 或任何其他存储库,并按需注入到您的微服务中。
如果您将代码副本复制到微服务中 - 进一步维护它会更加困难。想象一下 100 个微服务,它们内部有一个公共类,你想改变它。当您决定将微服务拆分到不同的存储库时,这将更加困难。
但是在使用 Spring REST 存储库时应该非常小心。当您为任何实体注入微服务公共存储库时,它会自动将其公开给 REST,因此您将在不同的微服务上拥有相同的 REST 点,这不好。Spring Security 可能存在问题(如果您忘记将其隐藏在某处)。
推荐阅读
- python - 输入字段和文本宽度
- python - 烛台图不显示
- c# - 如何在 UWP 中将 stackpanel 添加到 menuflyoutitem?
- reactjs - 使用 YARN 从私有注册表工件中提取依赖项
- javascript - 使用 React Native 对电话联系人进行排序
- python - 如何在python中使用列表进行拓扑排序
- javascript - 如何删除acf字段的重复结果以循环wordpress
- continuous-integration - CICD Java 应用程序(Maven)
- bash - 陷阱不退出循环
- python - 如何使用正则表达式解析日志以列出