繁体   English   中英

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

[英]Accessing the same MongoRepository collection from two different Spring Boot Applications

我正在处理两个不同的 spring 引导服务,它们需要访问一个公共的 MongoRepository 用户集合。

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

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

然后我将存储库获取为:UserRepository.java

public interface UserRepository extends MongoRepository<User, String> {

}

现在我需要另一个读取用户的应用程序 SpringBootApp2。 我计划在第二个服务中做同样的事情,但是我会有两个版本的用户 object,一个在每个服务上定义,并且两个都试图从同一个 MongoRepository 集合中读取。 如果一个用户 class 在一个服务中被修改,另一个将不知道并且他们将开始不同步,除了在两个服务上都有重复或代码之外。

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

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

更新:正如您所说,App1 对集合进行读写并仅向经过身份验证的用户授予访问权限,而 App2 执行简单的只读活动,在这种情况下,您可以在 App2 中使用 JPA 回购接口,仅读取采集方法实现。 您不需要实体的任何设置方法,也不需要为您的界面实现任何保存/更新方法。 这种设计是无害的。 您只是从两个不同的服务调用同一个数据库。 那没有坏处。 无论如何,您总是从 App2 对集合进行全新查询。

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

在这种情况下:

  1. App1会做安全相关的操作+其他服务
  2. 设计执行数据库操作工作的 App3,无需任何直接用户凭据或安全性
  3. App1 将执行身份验证,成功后调用 App3 进行任何数据库读写工作,App3 不需要任何安全措施
  4. App2 将调用 App3 进行任何 DB READ 操作,App3 不需要任何安全措施

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM