關於mongo多資料來源的處理
阿新 • 來源:網路 • 發佈:2021-02-08
技術標籤:javamongodbspringspring boot資料庫
關於mongo多資料來源的處理
hello,各位小夥伴大家好,我是小王子~,一名JAVA搬磚程式設計師,今天給大家分享一下,在專案過程中碰到的一個小問題吧。
大家都知道mongo是一個非關係型資料庫,在mongo裡面我們通過指定的database去裡面找到對應的collection,具體的話就是用到MongoTemplate模板物件去進行對mongo的crud操作了。
那麼在使用過程中,碰到了mongo的多資料來源操作,該如何處理呢?
1、定義對應的配置檔案
首先我們在properties檔案中去配置以下圖片內容。

如圖所示的內容就是兩個資料來源的配置了,
兩個及以上的可以依次類推,比葫蘆畫瓢。
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
