从两个不同的Spring Boot应用程序访问相同的MongoRepository集合

我正在开发两个不同的spring boot服务,这将需要访问用户的MongoRepository公用集合。

为简单起见,我们有SpringBootApp1: User.java

    @Document(collection = "user")
    public class User {
       @Id
       private String id;
       ....
    }

然后我得到的存储库为: UserRepository.java

public interface UserRepository extends MongoRepository<User,String> {

}

现在,我需要另一个应用程序SpringBootApp2来读取用户。我打算在第二项服务中执行相同的操作,但是随后我将拥有两个版本的User对象,一个在每个服​​务上定义,并且两个都试图从同一MongoRepository集合中读取。如果在一项服务中修改了一个User类,那么除了在这两个服务上都具有重复项或代码之外,另一个User类将不知道,并且它们将开始不同步。

在这种情况下最好的方法是什么?

iCMS 回答:从两个不同的Spring Boot应用程序访问相同的MongoRepository集合

为什么需要SpringBootApp2再次读取User表?您可以在SpringBootApp1中公开一个API,该API可通过从App2调用来获取所需的数据。您可以将所有与数据库相关的操作保留在一个微服务或一个应用中,如果需要数据库中的数据,只需公开App1中的方法并从App2中调用即可。

更新: 如您所说,App1对集合进行READ-WRITE并仅授予经过身份验证的用户访问权限,而App2进行简单的READ-ONLY活动,在这种情况下,您可以在App2中使用JPA repo接口,并且仅使用read from集合方法已实施。实体不需要任何设置方法,也不需要为接口实现保存/更新方法。这种设计是无害的。您只是从两个不同的服务调用同一个数据库。没什么害处。无论如何,您总是在对App2中的集合进行全新查询。

否则,如果您也对此方法有疑问,并且如果您不想保留来自不同服务的多个数据库读取逻辑,那么(我不知道您的App1除了数据库操作之外还提供哪些其他功能)我建议您创建App3,该App3仅用于数据库操作。

在这种情况下:

  1. App1将执行与安全相关的操作以及其他服务
  2. 设计App3,它可以进行数据库操作,而无需任何直接的用户凭据或安全性
  3. App1将执行身份验证,并且在成功调用App3进行任何DB READ-WRITE工作时,App3不需要任何安全性
  4. App2将为任何数据库读取操作调用App3,App3不需要任何安全性
本文链接:https://www.f2er.com/1724071.html

大家都在问