Spring boot 如何在Spring boot micro services中管理JPA实体?
我有两个共享数据库的微型服务。比如用户管理服务和组织管理服务。这两个服务都有自己的实体 现在的问题是我必须管理组织和用户之间的一对多关系,我几乎没有疑问的解决方案 解决方案:Spring boot 如何在Spring boot micro services中管理JPA实体?,spring-boot,architecture,spring-data-jpa,microservices,Spring Boot,Architecture,Spring Data Jpa,Microservices,我有两个共享数据库的微型服务。比如用户管理服务和组织管理服务。这两个服务都有自己的实体 现在的问题是我必须管理组织和用户之间的一对多关系,我几乎没有疑问的解决方案 解决方案: 我可以在这两个服务中复制实体(但如果实体中有任何更改,如添加或删除属性,我必须在 所有服务) 我可以为实体创建一个共享jar(但如果实体发生变化,我必须重新启动这两个服务) 我可以启动纯SQLquery 任何其他的建议或帮助都可以挽救我的一天 请给我一个更好的解决方案 您似乎试图遵循(好的)建议,即微服务应该维护自己的数据
SQL
query请给我一个更好的解决方案 您似乎试图遵循(好的)建议,即微服务应该维护自己的数据,并尽可能独立于其他服务。以此为前提,领域驱动设计提供了有用的建议 您的微服务分别管理一个(或一组)聚合。聚合是指
- 始终保持一致(除了在对聚合根的方法调用中)
- 从持久性存储中以原子方式存储和加载
Person
实体,你可能会发现它们没有相同的属性。例如,用户管理服务可能需要人员的哈希密码。组织管理服务可能有其他属性,甚至可能除了id之外没有其他属性
因此,您应该为这些设置单独的类。现在有不同的方法来结合这两个集合,这取决于它们的设计方式。让我们从最简单的开始:
如果人员
完全由一个服务所有,则其他所有内容都只需要id。在web应用程序中,您可以(也可能应该)只包含一个指向人员资源的链接,并加载要使用人员
所属服务显示的任何详细信息。您也可以在后端执行此操作,但这是另一天的决定
如果两个服务都有共同的属性(例如,您可能希望在组织管理服务中包括基本信息,如名称
),这样即使在其他服务不可用时,您也可以显示人类可读的内容。
在这种情况下,您可以使用事件通知服务需要应用于其实体版本的更改
请注意,您希望将任何事件处理与其他服务分离,以便
a) 事件基础结构中的问题不会导致服务尝试发布事件时出现问题
b) 当事件基础结构在一段时间内不可用时,您有一个同步信息的过程
需要维护的一个重要属性是,每个属性仅由一个服务更改。如果您不坚持认为,如果属性的值出现偏差,那么很难找出哪个是正确的变量。我添加了[architecture]标记,因为这似乎就是您的问题所在。如果是关于问题的更技术方面,那么问题可能需要更新。