1. 程式人生 > >spring boot 之 mongodb多資料來源配置

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 BootJdbcTemplate資料來源配置與使用

之前在介紹使用JdbcTemplate和Spring-data-jpa時,都使用了單資料來源。在單資料來源的情況下,Spring Boot的配置非常簡單,只需要在application.properties檔案中配置連線引數即可。但是往往隨著業務量發展,我們通常會進行資料庫拆分或是引入其他資料庫,從而我們需要

wordybearSTS下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 BootSpring-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為我們提供了相對簡單的實現。 一、建立如下結