亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何配置 spring-data-mongodb 以使用 2 個不同的 mongo

如何配置 spring-data-mongodb 以使用 2 個不同的 mongo

呼如林 2022-05-12 16:07:01
我在一家擁有多個品牌的公司工作,因此我們在一些不同的主機上擁有幾個MongoDB 實例,為每個品牌的客戶持有相同的文檔模型。(相同的結構,不同的數據)為簡單起見,假設我們有一個Orange品牌,數據庫實例服務于端口27017和Banana品牌,數據庫實例服務于端口27018目前我正在開發一種欺詐檢測服務,該服務需要連接到所有數據庫并一起分析所有客戶的行為,無論品牌如何。所以我的“模型”有一個Customer的共享實體,用@Document (org.springframework.data.mongodb.core.mapping.Document)注釋接下來我有兩個 MongoRepositories,例如:public interface BananaRepository extends MongoRepository<Customer, String>    List<Customer> findAllByEmail(String email);public interface OrangeRepository extends MongoRepository<Customer, String>    List<Customer> findAllByEmail(String email);使用一些存根方法通過 Id、Email 等查找客戶。Spring 負責為此類接口生成所有實現類(非常標準的 spring 東西)為了提示每個存儲庫連接到正確的 mongodb 實例,我需要兩個 Mongo Config,例如:@Configuration@EnableMongoRepositories(basePackageClasses = {Customer.class})public class BananaConfig extends AbstractMongoConfiguration {    @Value("${database.mongodb.banana.username:}")    private String username;    @Value("${database.mongodb.banana.database}")    private String database;    @Value("${database.mongodb.banana.password:}")    private String password;    @Value("${database.mongodb.banana.uri}")    private String mongoUri;    @Override    protected Collection<String> getMappingBasePackages() {        return Collections.singletonList("com.acme.model");    }    @Override    protected String getDatabaseName() {        return this.database;    }我對Orange也有類似的配置,它指向正確的 mongo 實例。請注意,我調用了兩個存儲庫,然后將結果收集到一個列表中我期望發生的是每個存儲庫都將連接到其相應的 mongo 實例并通過其電子郵件查詢客戶。但這并沒有發生。我總是對同一個 mongo 實例執行查詢。但是在數據庫日志中,我可以看到 spring 建立了兩個連接。它只使用一個連接來運行兩個存儲庫的查詢。這并不奇怪,因為兩個 Mongo Config 都指向同一個模型包。對。但我也嘗試了其他方法,例如創建一個BananaCustomer 擴展 Customer到它自己的model.banana包中,另一個OrangeCustomer 擴展 Customer到它的model.orange包中,同時在每個config中指定正確的 basePackageClasses。但這兩個都不起作用,我最終讓這兩個查詢都針對同一個數據庫運行。:(在搜索了幾個小時的 Spring-data-mongodb 官方文檔,并在這里和那里查看了數千行代碼之后,我已經沒有選擇了:似乎沒有人做過我之前想要完成的事情。 除了這里這個人必須做同樣的事情,但使用 JPA 而不是 mongodb:鏈接到文章好吧,雖然它仍然是彈簧數據,但它不是用于 mongodb。所以這是我的問題:? 如何明確告訴每個存儲庫使用特定的 mongo 配置?神奇的自動裝配規則,除非它不起作用并且沒有人了解魔法。提前致謝。
查看完整描述

1 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

好吧,我有一個非常詳細的答案,但 StackOverflow 抱怨看起來像垃圾郵件并且不允許我發布

完整答案仍可在此處作為 Gist 文件獲得

底線是MongoRepository(接口)和模型對象必須放在同一個包中。


查看完整回答
反對 回復 2022-05-12
  • 1 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號