spring boot 之 mongodb多資料來源配置
一、為什麼要使用多資料來源
在一些業務複雜的系統中,業務資料儲存可能在不同的mongodb庫中,此時,可能需要同時讀取這兩個庫裡的資料,進行一些邏輯處理,此時需要讀取不同的庫,為了解決這個問題,採用多資料來源操作。
二、多資料來源配置
spring boot自動配置了多種操作mongodb的api,這裡講解的是MongoTemplate,具體程式碼如下
1.新增依賴
<!-- mongoDB --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
2.新增配置
#第一個mongodb配置 spring.data.mongodb.primary.database=barrage #如果有多個地址 則這樣寫localhost:27017,localhost:27017 中間以逗號隔開 spring.data.mongodb.primary.hostPort=localhost:37017 spring.data.mongodb.primary.password= spring.data.mongodb.primary.username= #第二個mongodb配置 spring.data.mongodb.secondary.database=watch-record spring.data.mongodb.secondary.hostPort=localhost:37017 spring.data.mongodb.secondary.password= spring.data.mongodb.secondary.username=
3.重寫java配置
package com.example.multidatasource.config.mongodb; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; /** * 根據配置檔案建立MongoDbFactory * @date 2017年10月14日 * */ public abstract class AbstractMongoConfig { // Mongo DB Properties private String hostPort, database, username, password; // private String port; // Setter methods go here.. public String getHostPort() { return hostPort; } public void setHostPort(String hostPort) { this.hostPort = hostPort; } public String getDatabase() { return database; } public void setDatabase(String database) { this.database = database; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public MongoDbFactory mongoDbFactory() throws Exception { List<ServerAddress> seeds = new ArrayList<>(); String[] hostPorts = hostPort.split(","); for(int i = 0 ; i < hostPorts.length;i++){ String[] hps = hostPorts[i].split(":"); ServerAddress serverAddress = new ServerAddress(hps[0], Integer.valueOf(hps[1])); seeds.add(serverAddress); } if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)){ return new SimpleMongoDbFactory(new MongoClient(seeds), database); } List<MongoCredential> mongoCredentialList = new ArrayList<>(); mongoCredentialList.add(MongoCredential.createCredential(username, database, password.toCharArray())); return new SimpleMongoDbFactory(new MongoClient(seeds, mongoCredentialList), database); } abstract public MongoTemplate getMongoTemplate() throws Exception; }
從程式碼中可以看到,從配置檔案中讀取到相應屬性進行解析之後,建立MongoDbFactory物件即可。這裡要說的是,如果mongodb沒有設定使用者名稱密碼,則直接使用new SimpleMongoDbFactory(new MongoClient(seeds), database);連線即可。這裡使用的是構造方法是:
public MongoClient(List<ServerAddress> seeds) {
this(seeds, (new Builder()).build());
}
如果mongodb設定了使用者名稱密碼,則需要使用密碼驗證,此時使用的MongoClient構造方法是:
public MongoClient(List<ServerAddress> seeds, List<MongoCredential> credentialsList) {
this(seeds, credentialsList, (new Builder()).build());
}
MongoClient還提供了一些其他構造方法,感興趣的可以檢視原始碼
MongoTemplate相關配置如下:
- 第一個mongodb配置
package com.example.multidatasource.config.mongodb;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.core.MongoTemplate;
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.primary")
public class PrimaryMongoConfig extends AbstractMongoConfig {
@Primary
@Override
public @Bean(name = "primaryMongoTemplate") MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
這裡使用了註解@Primary,此註解表示如果沒有指明注入哪個MongoTemplate,優先注入此MongoTemplate
- 第二個MongoTemplate配置
package com.example.multidatasource.config.mongodb;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.secondary")
public class SecondaryMongoConfig extends AbstractMongoConfig{
@Override
public @Bean(name = "secondaryMongoTemplate") MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
4.去除spring boot mongodb自動配置
#去除mongodb自動配置
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
到此為止mongodb的多資料來源配置就算完成了
三、使用示例
相關推薦
spring boot 之 mongodb多資料來源配置
一、為什麼要使用多資料來源 在一些業務複雜的系統中,業務資料儲存可能在不同的mongodb庫中,此時,可能需要同時讀取這兩個庫裡的資料,進行一些邏輯處理,此時需要讀取不同的庫,為了解決這個問題,採用多資料來源操作。 二、多資料來源配置 spring boot自動配置
Spring Boot之JdbcTemplate多資料來源配置與使用
之前在介紹使用JdbcTemplate和Spring-data-jpa時,都使用了單資料來源。在單資料來源的情況下,Spring Boot的配置非常簡單,只需要在application.properties檔案中配置連線引數即可。但是往往隨著業務量發展,我們通常會進行資料庫拆分或是引入其他資料庫,從而我們需要
wordybear之STS下spring boot、mybatis多資料來源配置完全攻略及原始碼工程
// 2017.09.01 本文所依賴的開發環境早已更改為intellij idea,然而並不影響任何 本文面對初學者,在對基礎有些瞭解但又似懂非懂有些混亂的情況下(作者一般學習新技的最初狀態,此時需要冷靜)。 但是,仔細閱讀本文,將會在相同或相似的環境下實現sts下spr
spring boot的Jdbc多資料來源配置實戰
一 新建依賴 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin
Spring Boot整合Hibernate(多資料來源配置).md
配置資料來源: 定義兩個DataSource用來讀取application.properties中的不同配置: @Configuration public class DataSourceConfig { @Bean(
spring boot+mybatis+druid 多資料來源配置
application.yml(application.properties)配置: spring: datasource: druid: type: com.alibaba.druid.pool.xa.DruidXADataSource
Spring boot JdbcTemplate使用多資料來源配置
1、看下專案目錄 2、我們配置下application.properties,連線的兩個資料庫new_schema和new_test spring.datasource.primary.url =jdbc:mysql://localhost:3306
spring boot druid mybatis 多資料來源配置
1.application.properties spring.datasource.url = jdbc\:mysql\://192.168.1.1\:3306/business?autoRconnect\=true&useUnicode\=true&ch
spring boot druid mybatis 多資料來源 配置
spring boot 在配置時做了很多簡化配置的設定,但是簡化的配置往往已犧牲一定的定製化,比如在資料來源的配置時,spring boot 只提供4種資料庫連線池的配置,其中並不支援常用的druid 閱讀spring boot DataSourceB
Spring Boot的Spring-data-jpa的多資料來源配置實戰
一 新建pom <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>
Spring Boot 2.x基礎教程:Spring Data JPA的多資料來源配置
[上一篇](http://blog.didispace.com/spring-boot-learning-21-3-7/)我們介紹了在使用JdbcTemplate來做資料訪問時候的多資料來源配置實現。接下來我們繼續學習如何在使用Spring Data JPA的時候,完成多資料來源的配置和使用。 ## 新增多
spring boot 2.0多資料來源案例
主資料來源配置 @Configuration @MapperScan(basePackages = "com.somta.springboot.dao.master", sqlSessionTemplateRef = "masterSqlSessionTemplate
spring boot+mybatis+druid 多資料來源多庫分散式事務
廢話不多說,首先貼配置檔案,需要引入pomxml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter&l
Spring-Boot+Mybaits+MySql多資料來源+通用分頁外掛PageHelper的使用
一、專案目錄結構圖二、pom依賴<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc
(飛歌工作筆記)dubbo2.6.2+spring boot實現對多協議配置
背景:公司需要使用的dubbo來傳輸檔案。但是檔案比較大,就不能使用dubbo框架的dubbo協議了。dubbo協議會有大小限制。一般來說是8M。 所有能夠選擇的協議只有:hessian協議和rmi協議。 我的配置是基於rmi協議的。 我司使用的是yml配置檔案
spring boot 中logback多環境配置
spring boot 配置logback spring boot自帶了log列印功能,使用的是Commons logging 具體可以參考spring boot log 因此,我們只需要在reso
Spring-boot與maven多環境配置檔案設定
通常在開發時,不同的環境有不同的配置引數,通常會使用maven profile來選擇不同環境的配置檔案。下面介紹spring-boot專案如何與maven結合,來根據環境選擇不通的配置引數。 建立屬性配置檔案 首先為不同的環境配置不同的屬性配置檔案,命名
Spring Boot 動態連線多資料來源,主從資料庫
實際開發場景中,通常情況下單個微服務會配置多個數據源。本文簡單的介紹一下基於Spring boot框架動態連線多資料來源的實現,首先需要將新增的資料來源標籤化,在配置檔案中新增多個數據源,通過引數標籤的方式判斷不同請求對應的資料來源。採用主從配置的方式,配置
spring boot+jpa+druid多資料來源整合示例
新增pom依賴 <dependencies> <dependency> <groupId>org.springframework.boot</groupId>
SpringBoot2.0之八 多資料來源配置
在開發的過程中我們可能都會遇到對接公司其他系統等需求,對於外部的系統可以採用介面對接的方式,對於一個公司開發的兩個系統,並且知道相關資料庫結構的情況下,就可以考慮使用多資料來源來解決這個問題。SpringBoot為我們提供了相對簡單的實現。 一、建立如下結