该实例已测试

POM.XML

 <!-- Spring Boot mongodb 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

application.yml

  data:
mongodb:
primary:
uri: 192.168.0.103:27870
database:
username:
password:
authentication-database:
second:
uri: 192.168.0.103:27870
database:
username:
password:
authentication-database:
connectionsPerHost: 10
options:
min-connections-per-host: 8
threads-allowed-to-block-for-connection-multiplier: 4
max-wait-time: 1500
socket-timeout: 1500

AbstractMongoConfig

 package com.haoyun.common.config.mongo;

 import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import java.util.ArrayList;
import java.util.List; public class AbstractMongoConfig { protected List<String> uri;
protected String username;
protected String password;
protected String authenticationDatabase;
protected String database; @Value("${spring.data.mongodb.connectionsPerHost}")
private Integer connectionsPerHost; @Value("${spring.data.mongodb.options.min-connections-per-host}")
private Integer minConnectionsPerHost; @Value("${spring.data.mongodb.options.threads-allowed-to-block-for-connection-multiplier}")
private Integer threadsAllowedToBlockForConnectionMultiplier; @Value("${spring.data.mongodb.options.max-wait-time}")
private Integer maxWaitTime; @Value("${spring.data.mongodb.options.socket-timeout}")
private Integer socketTimeout; //覆盖默认的MongoDbFacotry
public MongoDbFactory mongoDbFactory() {
//客户端配置(连接数、副本集群验证)
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectionsPerHost(this.connectionsPerHost);
builder.minConnectionsPerHost(this.minConnectionsPerHost);
builder.threadsAllowedToBlockForConnectionMultiplier(this.threadsAllowedToBlockForConnectionMultiplier);
builder.maxWaitTime(this.maxWaitTime);
builder.socketTimeout(this.socketTimeout); MongoClientOptions mongoClientOptions = builder.build(); List<ServerAddress> serverAddresses = new ArrayList<>();
List<String> address = this.uri;
for (String add : address) {
String[] str = add.split(":");
ServerAddress serverAddress = new ServerAddress(str[0], Integer.parseInt(str[1]));
serverAddresses.add(serverAddress);
} // 连接认证
List<MongoCredential> mongoCredentialList = new ArrayList<>();
if (this.username != null) {
mongoCredentialList.add(MongoCredential.createScramSha1Credential(
this.username,
this.authenticationDatabase != null ? this.authenticationDatabase : this.database,
this.password.toCharArray()));
}
System.out.println("mongoCredentialList:" + mongoCredentialList.toString()); //创建客户端和Factory
MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredentialList, mongoClientOptions);
MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, this.database); return mongoDbFactory;
} public List<String> getUri() {
return uri;
} public void setUri(List<String> uri) {
this.uri = uri;
} 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 String getAuthenticationDatabase() {
return authenticationDatabase;
} public void setAuthenticationDatabase(String authenticationDatabase) {
this.authenticationDatabase = authenticationDatabase;
} public String getDatabase() {
return database;
} public void setDatabase(String database) {
this.database = database;
}
}

PrimaryMongoConfig

 package com.haoyun.common.config.mongo;

 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; /**
* @author milicool
* Created on 2018/11/26
*/
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.primary")
public class PrimaryMongoConfig extends AbstractMongoConfig { @Primary
@Bean(name = "mongoTemplate")
public MongoTemplate getMongoTemplate() {
return new MongoTemplate(mongoDbFactory());
}
}

SecondMongoConfig

 package com.haoyun.common.config.mongo;

 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; /**
* @author milicool
* Created on 2018/11/26
*/
@Configuration
@ConfigurationProperties(prefix="spring.data.mongodb.second")
public class SecondMongoConfig extends AbstractMongoConfig { @Bean(name = "secondMmongoTemplate")
public MongoTemplate getMongoTemplate() {
return new MongoTemplate(mongoDbFactory());
}
}

MongoDao

 package com.haoyun.common.jdbc;

 import com.mongodb.client.result.UpdateResult;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository; import javax.annotation.Resource;
import java.util.List; @Repository("mongoDao")
public class MongoDao { @Resource(name = "mongoTemplate")
private MongoTemplate mongoTemplate; public void insert(Object o, String collectionName) {
mongoTemplate.insert(o, collectionName);
} public <T> T findOne(Query query, String collectionName, Class<T> clazz) {
return mongoTemplate.findOne(query, clazz, collectionName);
} public <T> List<T> findAll(Query query, String collectionName, Class<T> clazz) {
return mongoTemplate.find(query, clazz, collectionName);
} public int update(Query query, Update update, String collectionName) {
UpdateResult writeResult = mongoTemplate.upsert(query, update, collectionName);
return (int) writeResult.getModifiedCount();
} public void createCollection(String collectionName) {
mongoTemplate.createCollection(collectionName);
} public <T> void remove(Query query, String collectionName) {
mongoTemplate.remove(query, collectionName);
} public long count(Query query, String collectionName) {
return mongoTemplate.count(query, collectionName);
} public <T> T findAndModify(Query query, Update update, String collectionName, Class<T> clazz) {
return mongoTemplate.findAndModify(query, update, clazz, collectionName);
} public <T> List<T> findAggregation(Aggregation agg, String collectionName, Class<T> clazz) {
return mongoTemplate.aggregate(agg, collectionName, clazz).getMappedResults();
} }

SecondMongoDao

package com.haoyun.common.jdbc;

import com.mongodb.client.result.UpdateResult;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository; import javax.annotation.Resource;
import java.util.List; @Repository("secondMongoDao")
public class SecondMongoDao { @Resource(name = "secondMmongoTemplate")
private MongoTemplate mongoTemplate; public void insert(Object o, String collectionName) {
mongoTemplate.insert(o, collectionName);
} public <T> T findOne(Query query, String collectionName, Class<T> clazz) {
return mongoTemplate.findOne(query, clazz, collectionName);
} public <T> List<T> findAll(Query query, String collectionName, Class<T> clazz) {
return mongoTemplate.find(query, clazz, collectionName);
} public int update(Query query, Update update, String collectionName) {
UpdateResult writeResult = mongoTemplate.upsert(query, update, collectionName);
return (int) writeResult.getModifiedCount();
} public void createCollection(String collectionName) {
mongoTemplate.createCollection(collectionName);
} public <T> void remove(Query query, String collectionName) {
mongoTemplate.remove(query, collectionName);
} public long count(Query query, String collectionName) {
return mongoTemplate.count(query, collectionName);
} public <T> T findAndModify(Query query, Update update, String collectionName, Class<T> clazz) {
return mongoTemplate.findAndModify(query, update, clazz, collectionName);
} public <T> List<T> findAggregation(Aggregation agg, String collectionName, Class<T> clazz) {
return mongoTemplate.aggregate(agg, collectionName, clazz).getMappedResults();
} }

引入

测试

结语

有两处不爽的地方,为啥加一个数据源就要多个config和Dao, 所有的都公用一个行不行?(待优化)

长路漫漫, 走过了村落, 却忘记了你的脸庞

springboot整合mongo多数据源的更多相关文章

  1. SpringBoot整合阿里Druid数据源及Spring-Data-Jpa

    SpringBoot整合阿里Druid数据源及Spring-Data-Jpa https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=224 ...

  2. SpringBoot整合Mybatis多数据源 (AOP+注解)

    SpringBoot整合Mybatis多数据源 (AOP+注解) 1.pom.xml文件(开发用的JDK 10) <?xml version="1.0" encoding=& ...

  3. 三、SpringBoot 整合mybatis 多数据源以及分库分表

    前言 说实话,这章本来不打算讲的,因为配置多数据源的网上有很多类似的教程.但是最近因为项目要用到分库分表,所以让我研究一下看怎么实现.我想着上一篇博客讲了多环境的配置,不同的环境调用不同的数据库,那接 ...

  4. SpringBoot整合Mybatis,多数据源,事务,支持java -jar 启动.

    用了一段时间SpringBoot,之前配置MYBATIS ,在打包WAR 放到tomcat下正常,但是WAR已经过时了,现在流行直接打包JAR 丢到DOCKER 里,无奈JAR 启动的时候MAPPER ...

  5. SpringBoot整合mybatis多数据源,支持分布式事务

    编码工具:IDEA SpringBoot版本:2.0.1 JDK版本:1.8 1.使用IDEA构建一个Maven工程 ,添加依赖: <?xml version="1.0" e ...

  6. spring-boot整合Mybatis多数据源案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  7. spring-boot整合mybaits多数据源动态切换案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  8. spring-boot整合mongodb多数据源的案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  9. 【java框架】SpringBoot(7) -- SpringBoot整合MyBatis

    1.整合MyBatis操作 前面一篇提到了SpringBoot整合基础的数据源JDBC.Druid操作,实际项目中更常用的还是MyBatis框架,而SpringBoot整合MyBatis进行CRUD也 ...

随机推荐

  1. Sqlserver风格规范

    常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自增长标识建议采用bigint ...

  2. php CI框架 使用PDO 的连接配置

    $db['default'] = array( 'dsn' => 'mysql:dbname=hejun;host=192.168.137.127', //'hostname' => '' ...

  3. php 递归求得目录大小

    /* * 递归求得目录大小 * @param $dir 目录 */ function dirsize($dir){ $allsize = 0; $handle = opendir($dir); whi ...

  4. shipyard

    https://www.ivankrizsan.se/2016/07/10/managing-containers-shipyard/ kubernetes中文社区:https://www.kuber ...

  5. C# LINQ(2)

    前一章的代码LINQ都是以select结尾. 之前也说过可以group结尾. 那么怎么使用呢? 还是一样的条件,查询小于5大于0的元素 代码: ,,,,,,,,, }; var list = from ...

  6. Python的特殊属性和魔法函数

    python中有很多以下划线开头和结尾的特殊属性和魔法函数,它们有着很重要的作用. 1.__doc__:说明性文档和信息,python自建,不需要我们定义. # -*- coding:utf- -*- ...

  7. Tomcat8.5安装教程

    如果第一次安装的用户请耐心阅读哈安装方法1.下载完成后开始安装,第一次安装的用户建议直接点击“next”不选择插件2.可以自行设置账户名以及密码3.非常重要的一步!!!!!!!!!设置jdk安装目录, ...

  8. pip_install的安装

    1.下载get-pip.py https://pip.pypa.io/en/latest/installing/#id9 2.运行 python get-pip.py 3.python -m pip ...

  9. 杀死进程命令 kill

    一般kill命令和ps命令结合使用, 例:现在想杀死telnet的进程 1.在所有进程中查看telnet命令 ps -ef |grep telnet 2.根据上面命令查到的进程id,如pid 是 xx ...

  10. 在Pd中取消Code Name 同步

    以前记得现在忘记了,好不容易找回来,记住备忘吧.