簡體   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