该实例已测试

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. linux下利用httpd搭建tomcat集群,实现负载均衡

    公司使用运营管理平台是单点tomcat,使用量大,或者导出较大的运营数据时,会造成平台不可用,现在需要搭建tomcat集群,调研后,决定使用apache的httpd来搭建tomcat集群.以下是搭建步 ...

  2. kafka启动报错Cannot allocate memory;There is insufficient memory for the Java Runtime Environment to continue.

    kafka启动过程报错,配置没有问题,这就懵了!! Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000 ...

  3. iOS 查看代码总行数

    1.打开终端 2.cd 拖入工程 回车 3.输入命令 find . "(" -name "*.m" -or -name "*.mm" -or ...

  4. python 中如何判断list中是否包含某个元素

    在python中可以通过in和not in关键字来判读一个list中是否包含一个元素 theList = ['a','b','c'] if 'a' in theList: print 'a in th ...

  5. Mysql高性能优化规范建议

    数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意 ...

  6. 数据结构之BF算法,kmp算法,三元组,十字链表总结

    在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...

  7. shell和matlab之间的参数传递

        shell和matlab之间的参数传递比shell和Python之间的参数传递要简单,在matlab程序中(以.m脚本文件为例,其他程序如函数等未测试)不需要进行任何配置,直接使用即可,见下面 ...

  8. win7下钩子失效解决方案

    win7键盘钩子失效解决方法:1.win开始右键+r(运行) 2.将其输入regedit.exe(注册表管理器),回车打开注册表管理器 3.进入HKEY_LOCAL_MACHINE4.进入到SYS ...

  9. [I/O]一览图

  10. THU 上机 最小邮票数 暴力枚举

    链接:https://www.nowcoder.com/questionTerminal/83800ae3292b4256b7349ded5f178dd1?toCommentId=2533792来源: ...