1. 程式人生 >實用技巧 >其它 >關於mongo多資料來源的處理

關於mongo多資料來源的處理


技術標籤:javamongodbspringspring boot資料庫

關於mongo多資料來源的處理

hello,各位小夥伴大家好,我是小王子~,一名JAVA搬磚程式設計師,今天給大家分享一下,在專案過程中碰到的一個小問題吧。

大家都知道mongo是一個非關係型資料庫,在mongo裡面我們通過指定的database去裡面找到對應的collection,具體的話就是用到MongoTemplate模板物件去進行對mongo的crud操作了。

那麼在使用過程中,碰到了mongo的多資料來源操作,該如何處理呢?

1、定義對應的配置檔案

首先我們在properties檔案中去配置以下圖片內容。

關於mongo多資料來源的處理


如圖所示的內容就是兩個資料來源的配置了,

兩個及以上的可以依次類推,比葫蘆畫瓢。

2、建立一個讀取配置檔案的類

@Component
//從配置檔案中讀取開頭為mongodb的配置屬性
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {

    private MongoProperties primary = new MongoProperties();

    //如果有第三個就一次定義和進行set和get賦值處理,**比葫蘆畫瓢以此類推**

    private MongoProperties secondary = new MongoProperties();

    public MongoProperties getPrimary() {
        return primary;
    }

    public void setPrimary(MongoProperties primary) {
        this.primary = primary;
    }

    public MongoProperties getSecondary() {
        return secondary;
    }

    public void setSecondary(MongoProperties secondary) {
        this.secondary = secondary;
    }
}
// An highlighted block
@Component
//從配置檔案中讀取開頭為mongodb的配置屬性
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {

    private MongoProperties primary = new MongoProperties();

    private MongoProperties secondary = new MongoProperties();
    
    //如果有第三個就一次定義和進行set和get賦值處理,**比葫蘆畫瓢以此類推**

    public MongoProperties getPrimary() {
        return primary;
    }

    public void setPrimary(MongoProperties primary) {
        this.primary = primary;
    }

    public MongoProperties getSecondary() {
        return secondary;
    }

    public void setSecondary(MongoProperties secondary) {
        this.secondary = secondary;
    }
}

3、建立資料來源對應的mongotemplate配置類

下圖是自定義的第二個資料來源,然後其他資料來源類似,比葫蘆畫瓢。

@Configuration
//代表的是我們自定義的mongoTemplate模板物件
@EnableMongoRepositories(mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
    public static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}
// An highlighted block
@Configuration
//代表的是我們自定義的mongoTemplate模板物件
@EnableMongoRepositories(mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
    public static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}

4、實現Bean注入自定義的mongoTemplate物件

最後一步,也是最重要的一步。

@Configuration
public class MultipleMongoConfig {

    //首先對我們建立的讀取mongo配置檔案的類進行注入
    @Autowired
    private MultipleMongoProperties mongoProperties;

	//一定要定義一個主資料來源,也就是primary資料來源,我們直接和配置檔案保持一致即可。
    @Primary
    //這個注入的名稱就是我們已經定義的mongoTemplate的name。
    @Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate primaryMongoTemplate() throws Exception {
        MongoProperties primary = this.mongoProperties.getPrimary();
        String uri = primary.getUri();
        MongoClientURI mongoClientURI = new MongoClientURI(uri);
        //此方式是通過mongo的URI方式進行連線
        MongoClient mongoClient = new MongoClient(mongoClientURI);
        return new MongoTemplate(mongoClient, primary.getDatabase());
    }

	//注入其他資料來源的操作。
    @Bean
    //定義其他資料來源的名稱。
    @Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate secondaryMongoTemplate() throws Exception {
        MongoProperties secondary = this.mongoProperties.getSecondary();
        String uri = secondary.getUri();
        MongoClientURI mongoClientURI = new MongoClientURI(uri);
        //同樣的,此方式是通過mongo的URI方式進行連線
        MongoClient mongoClient = new MongoClient(mongoClientURI);
        return new MongoTemplate(mongoClient, secondary.getDatabase());
    }
}
// An highlighted block
@Configuration
public class MultipleMongoConfig {

    //首先對我們建立的讀取mongo配置檔案的類進行注入
    @Autowired
    private MultipleMongoProperties mongoProperties;

	//一定要定義一個主資料來源,也就是primary資料來源,我們直接和配置檔案保持一致即可。
    @Primary
    //這個注入的名稱就是我們已經定義的mongoTemplate的name。
    @Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate primaryMongoTemplate() throws Exception {
        MongoProperties primary = this.mongoProperties.getPrimary();
        String uri = primary.getUri();
        MongoClientURI mongoClientURI = new MongoClientURI(uri);
        //此方式是通過mongo的URI方式進行連線
        MongoClient mongoClient = new MongoClient(mongoClientURI);
        return new MongoTemplate(mongoClient, primary.getDatabase());
    }

	//注入其他資料來源的操作。
    @Bean
    //定義其他資料來源的名稱。
    @Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate secondaryMongoTemplate() throws Exception {
        MongoProperties secondary = this.mongoProperties.getSecondary();
        String uri = secondary.getUri();
        MongoClientURI mongoClientURI = new MongoClientURI(uri);
        //同樣的,此方式是通過mongo的URI方式進行連線
        MongoClient mongoClient = new MongoClient(mongoClientURI);
        return new MongoTemplate(mongoClient, secondary.getDatabase());
    }
}

Finally:以上是關於mongo多資料來源的配置,如果有哪裡沒有提及到的地方,還請各位大佬補充和指教,作者在這裡謝過各位大佬!

Everyone have a good dream,If you want,and do it,The dream will come true In the fruture.

Last but not least,
注:轉載請聯絡作者!
WeChat:13160339561