上一篇介绍了 springboot集成mongodb 多数据库源切换 源码demo

开发环境:

windows 7
idea
windows64 mongodb 如果没安装运行 点这里
navicat for mongodb 下面介绍用的是这个图形工具,命令行客户端或其他图形工具都是可以的,如果需要这个 点这里

创建mongodb测试的数据

首先连接mongodb
新建第一个mongodb数据库 testdb

打开数据库testdb,然后点击新建查询,在查询栏中 新建数据库testdb的集合user 并添加一条记录,点击运行

查询栏内容:

db.createCollection('user')db.user.insert({account: '110',password: '123456',phone: '188xxxxxxxx',name: 'zhangsan'
})

新建第二个数据库 testdb2

打开数据库testdb2,然后点击新建查询,在查询栏中 新建数据库testdb2的集合music并添加一条记录,点击运行

查询栏内容:

db.createCollection('music')db.music.insert({name: '喜欢你',singer: '邓紫棋'
})

springboot mongodb 配置连接池 多数据库源 测试源码

springboot 项目 mongodb_demo3 目录结构,如下

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>mongodb_demo3</artifactId><version>0.0.1-SNAPSHOT</version><name>mongodb_demo3</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

配置文件 application.properties

server.port=8088
#第一个数据库
spring.data.mongodb.testdb.database=testdb
spring.data.mongodb.testdb.addresses=localhost:27017
spring.data.mongodb.testdb.username=root
spring.data.mongodb.testdb.password=123456
#spring.data.mongodb.testdb.port=27017#第二个数据库
spring.data.mongodb.testdb2.database=testdb2
spring.data.mongodb.testdb2.addresses=localhost:27017
spring.data.mongodb.testdb2.username=root
spring.data.mongodb.testdb2.password=123456
#spring.data.mongodb.testdb2.port=27017

mongodb 连接池配置文件 mongodb_pool.properties

# mongodbDB Pool
spring.data.mongodb.min-connections-per-host=10
spring.data.mongodb.max-connections-per-host=100
spring.data.mongodb.threads-allowed-to-block-for-connection-multiplier=5
spring.data.mongodb.server-selection-timeout=30000
spring.data.mongodb.max-wait-time=120000
spring.data.mongodb.max-connection-idel-time=0
spring.data.mongodb.max-connection-life-time=0
spring.data.mongodb.connect-timeout=10000
spring.data.mongodb.socket-timeout=0
spring.data.mongodb.socket-keep-alive=false
spring.data.mongodb.ssl-enabled=false
spring.data.mongodb.ssl-invalid-host-name-allowed=false
spring.data.mongodb.always-use-m-beans=false
spring.data.mongodb.heartbeat-socket-timeout=20000
spring.data.mongodb.heartbeat-connect-timeout=20000
spring.data.mongodb.min-heartbeat-frequency=500
spring.data.mongodb.heartbeat-frequency=10000
spring.data.mongodb.local-threshold=15
spring.data.mongodb.authentication-database=auth_dev

数据库连接池的配置类 MongoSettingsProperties

package com.example.mongodb_demo3.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;/*** 配置文件映射为JavaBean*/
@Component
@PropertySource(value = "classpath:mongodb_pool.properties")
@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoSettingsProperties {private Integer minConnectionsPerHost = 0;private Integer maxConnectionsPerHost = 100;private Integer threadsAllowedToBlockForConnectionMultiplier = 5;private Integer serverSelectionTimeout = 30000;private Integer maxWaitTime = 120000;private Integer maxConnectionIdleTime = 0;private Integer maxConnectionLifeTime = 0;private Integer connectTimeout = 10000;private Integer socketTimeout = 0;private Boolean socketKeepAlive = false;private Boolean sslEnabled = false;private Boolean sslInvalidHostNameAllowed = false;private Boolean alwaysUseMBeans = false;private Integer heartbeatConnectTimeout = 20000;private Integer heartbeatSocketTimeout = 20000;private Integer minHeartbeatFrequency = 500;private Integer heartbeatFrequency = 10000;private Integer localThreshold = 15;private String authenticationDatabase;public Integer getMinConnectionsPerHost() {return minConnectionsPerHost;}public void setMinConnectionsPerHost(Integer minConnectionsPerHost) {this.minConnectionsPerHost = minConnectionsPerHost;}public Integer getMaxConnectionsPerHost() {return maxConnectionsPerHost;}public void setMaxConnectionsPerHost(Integer maxConnectionsPerHost) {this.maxConnectionsPerHost = maxConnectionsPerHost;}public Integer getThreadsAllowedToBlockForConnectionMultiplier() {return threadsAllowedToBlockForConnectionMultiplier;}public void setThreadsAllowedToBlockForConnectionMultiplier(Integer threadsAllowedToBlockForConnectionMultiplier) {this.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier;}public Integer getServerSelectionTimeout() {return serverSelectionTimeout;}public void setServerSelectionTimeout(Integer serverSelectionTimeout) {this.serverSelectionTimeout = serverSelectionTimeout;}public Integer getMaxWaitTime() {return maxWaitTime;}public void setMaxWaitTime(Integer maxWaitTime) {this.maxWaitTime = maxWaitTime;}public Integer getMaxConnectionIdleTime() {return maxConnectionIdleTime;}public void setMaxConnectionIdleTime(Integer maxConnectionIdleTime) {this.maxConnectionIdleTime = maxConnectionIdleTime;}public Integer getMaxConnectionLifeTime() {return maxConnectionLifeTime;}public void setMaxConnectionLifeTime(Integer maxConnectionLifeTime) {this.maxConnectionLifeTime = maxConnectionLifeTime;}public Integer getConnectTimeout() {return connectTimeout;}public void setConnectTimeout(Integer connectTimeout) {this.connectTimeout = connectTimeout;}public Integer getSocketTimeout() {return socketTimeout;}public void setSocketTimeout(Integer socketTimeout) {this.socketTimeout = socketTimeout;}public Boolean getSocketKeepAlive() {return socketKeepAlive;}public void setSocketKeepAlive(Boolean socketKeepAlive) {this.socketKeepAlive = socketKeepAlive;}public Boolean getSslEnabled() {return sslEnabled;}public void setSslEnabled(Boolean sslEnabled) {this.sslEnabled = sslEnabled;}public Boolean getSslInvalidHostNameAllowed() {return sslInvalidHostNameAllowed;}public void setSslInvalidHostNameAllowed(Boolean sslInvalidHostNameAllowed) {this.sslInvalidHostNameAllowed = sslInvalidHostNameAllowed;}public Boolean getAlwaysUseMBeans() {return alwaysUseMBeans;}public void setAlwaysUseMBeans(Boolean alwaysUseMBeans) {this.alwaysUseMBeans = alwaysUseMBeans;}public Integer getHeartbeatConnectTimeout() {return heartbeatConnectTimeout;}public void setHeartbeatConnectTimeout(Integer heartbeatConnectTimeout) {this.heartbeatConnectTimeout = heartbeatConnectTimeout;}public Integer getHeartbeatSocketTimeout() {return heartbeatSocketTimeout;}public void setHeartbeatSocketTimeout(Integer heartbeatSocketTimeout) {this.heartbeatSocketTimeout = heartbeatSocketTimeout;}public Integer getMinHeartbeatFrequency() {return minHeartbeatFrequency;}public void setMinHeartbeatFrequency(Integer minHeartbeatFrequency) {this.minHeartbeatFrequency = minHeartbeatFrequency;}public Integer getHeartbeatFrequency() {return heartbeatFrequency;}public void setHeartbeatFrequency(Integer heartbeatFrequency) {this.heartbeatFrequency = heartbeatFrequency;}public Integer getLocalThreshold() {return localThreshold;}public void setLocalThreshold(Integer localThreshold) {this.localThreshold = localThreshold;}public String getAuthenticationDatabase() {return authenticationDatabase;}public void setAuthenticationDatabase(String authenticationDatabase) {this.authenticationDatabase = authenticationDatabase;}
}

testdb数据库的配置类 TestdbMongoConfiguration

package com.example.mongodb_demo3.config;import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Autowired;
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.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.List;@Configuration
//读取配置文件中spring.data.mongodb.testdb 开头的属性如database,通过反射调用setDatabase()保存从配置文件中读取的database值
//需要maven依赖 spring-boot-configuration-processor
@ConfigurationProperties(prefix = "spring.data.mongodb.testdb")
public class TestdbMongoConfiguration {// MongoDB Propertiesprivate ArrayList<String> addresses;private String database, username, password;private int port;public ArrayList<String> getAddresses() {return addresses;}public void setAddresses(ArrayList<String> addresses) {this.addresses = addresses;}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 int getPort() {return port;}public void setPort(int port) {this.port = port;}@AutowiredMongoSettingsProperties properties;/*** 覆盖容器中默认的MongoDbFacotry Bean*/public MongoDbFactory mongoDbFactory() {MongoClientOptions.Builder builder = new MongoClientOptions.Builder();builder.connectionsPerHost(properties.getMaxConnectionsPerHost());builder.minConnectionsPerHost(properties.getMinConnectionsPerHost());builder.threadsAllowedToBlockForConnectionMultiplier(properties.getThreadsAllowedToBlockForConnectionMultiplier());builder.serverSelectionTimeout(properties.getServerSelectionTimeout());builder.maxWaitTime(properties.getMaxWaitTime());builder.maxConnectionIdleTime(properties.getMaxConnectionIdleTime());builder.maxConnectionLifeTime(properties.getMaxConnectionLifeTime());builder.connectTimeout(properties.getConnectTimeout());builder.socketTimeout(properties.getSocketTimeout());// builder.socketKeepAlive(properties.getSocketKeepAlive());builder.sslEnabled(properties.getSslEnabled());builder.sslInvalidHostNameAllowed(properties.getSslInvalidHostNameAllowed());builder.alwaysUseMBeans(properties.getAlwaysUseMBeans());builder.heartbeatFrequency(properties.getHeartbeatFrequency());builder.minHeartbeatFrequency(properties.getMinHeartbeatFrequency());builder.heartbeatConnectTimeout(properties.getHeartbeatConnectTimeout());builder.heartbeatSocketTimeout(properties.getHeartbeatSocketTimeout());builder.localThreshold(properties.getLocalThreshold());MongoClientOptions mongoClientOptions = builder.build();// MongoDB地址列表List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();for (String address : addresses) {String[] hostAndPort = address.split(":");String host = hostAndPort[0];Integer port = Integer.parseInt(hostAndPort[1]);ServerAddress serverAddress = new ServerAddress(host, port);serverAddresses.add(serverAddress);}// 连接认证// MongoCredential mongoCredential = null;//     mongoCredential = MongoCredential.createScramSha1Credential(MongoCredential.createCredential(username, database, password.toCharArray()));// 创建认证客户端// MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredential, mongoClientOptions);// 创建非认证客户端MongoClient mongoClient = new MongoClient(serverAddresses, mongoClientOptions);// 创建MongoDbFactoryMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, database);return mongoDbFactory;}//第一个数据库 默认作为主数据库 需要添加注解 @Primary ,后面的数据库不需要这个注解@Primary@Bean(name = "testdbMongoTemplate")public  MongoTemplate getMongoTemplate() throws Exception {return new MongoTemplate(mongoDbFactory());}
}

testdb2数据库的配置类 Testdb2MongoConfiguration

package com.example.mongodb_demo3.config;import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;import java.util.ArrayList;
import java.util.List;@Configuration
//读取配置文件中spring.data.mongodb.testdb 开头的属性如database,通过反射调用setDatabase()保存从配置文件中读取的database值
//需要maven依赖 spring-boot-configuration-processor
@ConfigurationProperties(prefix = "spring.data.mongodb.testdb2")
public class Testdb2MongoConfiguration {// MongoDB Propertiesprivate ArrayList<String> addresses;private String database, username, password;private int port;public ArrayList<String> getAddresses() {return addresses;}public void setAddresses(ArrayList<String> addresses) {this.addresses = addresses;}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 int getPort() {return port;}public void setPort(int port) {this.port = port;}@AutowiredMongoSettingsProperties properties;/*** 覆盖容器中默认的MongoDbFacotry Bean*/public MongoDbFactory mongoDbFactory() {MongoClientOptions.Builder builder = new MongoClientOptions.Builder();builder.connectionsPerHost(properties.getMaxConnectionsPerHost());builder.minConnectionsPerHost(properties.getMinConnectionsPerHost());builder.threadsAllowedToBlockForConnectionMultiplier(properties.getThreadsAllowedToBlockForConnectionMultiplier());builder.serverSelectionTimeout(properties.getServerSelectionTimeout());builder.maxWaitTime(properties.getMaxWaitTime());builder.maxConnectionIdleTime(properties.getMaxConnectionIdleTime());builder.maxConnectionLifeTime(properties.getMaxConnectionLifeTime());builder.connectTimeout(properties.getConnectTimeout());builder.socketTimeout(properties.getSocketTimeout());// builder.socketKeepAlive(properties.getSocketKeepAlive());builder.sslEnabled(properties.getSslEnabled());builder.sslInvalidHostNameAllowed(properties.getSslInvalidHostNameAllowed());builder.alwaysUseMBeans(properties.getAlwaysUseMBeans());builder.heartbeatFrequency(properties.getHeartbeatFrequency());builder.minHeartbeatFrequency(properties.getMinHeartbeatFrequency());builder.heartbeatConnectTimeout(properties.getHeartbeatConnectTimeout());builder.heartbeatSocketTimeout(properties.getHeartbeatSocketTimeout());builder.localThreshold(properties.getLocalThreshold());MongoClientOptions mongoClientOptions = builder.build();// MongoDB地址列表List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();for (String address : addresses) {String[] hostAndPort = address.split(":");String host = hostAndPort[0];Integer port = Integer.parseInt(hostAndPort[1]);ServerAddress serverAddress = new ServerAddress(host, port);serverAddresses.add(serverAddress);}// 连接认证// MongoCredential mongoCredential = null;//    mongoCredential = MongoCredential.createScramSha1Credential(MongoCredential.createCredential(username, database, password.toCharArray()));// 创建认证客户端// MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredential, mongoClientOptions);// 创建非认证客户端MongoClient mongoClient = new MongoClient(serverAddresses, mongoClientOptions);// 创建MongoDbFactoryMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, database);return mongoDbFactory;}//这是第二个数据库源,不需要注解 @Primary@Bean(name = "testdb2MongoTemplate")public  MongoTemplate getMongoTemplate() throws Exception {return new MongoTemplate(mongoDbFactory());}
}

User

package com.example.mongodb_demo3.pojo;import org.springframework.data.mongodb.core.mapping.Document;//user 是mongodb数据库中集合名
@Document(collection="user")
public class User {private String account;private String password;private String name;private String phone;public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "User{" +"account='" + account + '\'' +", password='" + password + '\'' +", name='" + name + '\'' +", phone='" + phone + '\'' +'}';}
}

Music

package com.example.mongodb_demo3.pojo;import org.springframework.data.mongodb.core.mapping.Document;//music 是mongodb数据库中集合名
@Document(collection="music")
public class Music {private String name;private String singer;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSinger() {return singer;}public void setSinger(String singer) {this.singer = singer;}@Overridepublic String toString() {return "Music{" +"name='" + name + '\'' +", singer='" + singer + '\'' +'}';}
}

web测试类 TestController

package com.example.mongodb_demo3.controller;import com.example.mongodb_demo3.pojo.Music;
import com.example.mongodb_demo3.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@Autowired@Qualifier(value = "testdbMongoTemplate")protected MongoTemplate testdbMongoTemplate;@Autowired@Qualifier(value = "testdb2MongoTemplate")protected MongoTemplate testdb2MongoTemplate;@RequestMapping("/test")public String test(){//第一个数据库源testdbQuery query = new Query();query.addCriteria(Criteria.where("name").is("zhangsan"));User user = testdbMongoTemplate.findOne(query, User.class);//第二个数据库源testdb2Query query2 = new Query();query2.addCriteria(Criteria.where("name").is("喜欢你"));Music music = testdb2MongoTemplate.findOne(query2, Music.class);return "来自第一个数据库源 " + user.toString() + "<br/>来自第二个数据库源 " + music.toString();}
}

启动类 MongodbDemo3Application

package com.example.mongodb_demo3;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MongodbDemo3Application {public static void main(String[] args) {SpringApplication.run(MongodbDemo3Application.class, args);}}

idea 启动程序

idea启动程序,可以看到 每个数据库都初始创建了10个连接放在各自的连接池中,配置文件中设置的连接池最小个数就是10

具体启动信息:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=57353 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\Program Files\IntelliJ_IDEA\lib\idea_rt.jar=57354:D:\Program Files\IntelliJ_IDEA\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;E:\workspace_idea\mongodb_demo3\target\classes;E:\maven_repository_new\org\springframework\boot\spring-boot-configuration-processor\2.0.4.RELEASE\spring-boot-configuration-processor-2.0.4.RELEASE.jar;E:\maven_repository_new\org\springframework\boot\spring-boot-starter-data-mongodb\2.0.4.RELEASE\spring-boot-starter-data-mongodb-2.0.4.RELEASE.jar;E:\maven_repository_new\org\mongodb\mongodb-driver\3.6.4\mongodb-driver-3.6.4.jar;E:\maven_repository_new\org\mongodb\bson\3.6.4\bson-3.6.4.jar;E:\maven_repository_new\org\mongodb\mongodb-driver-core\3.6.4\mongodb-driver-core-3.6.4.jar;E:\maven_repository_new\org\springframework\data\spring-data-mongodb\2.0.9.RELEASE\spring-data-mongodb-2.0.9.RELEASE.jar;E:\maven_repository_new\org\springframework\spring-tx\5.0.8.RELEASE\spring-tx-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\spring-context\5.0.8.RELEASE\spring-context-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\spring-beans\5.0.8.RELEASE\spring-beans-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\spring-expression\5.0.8.RELEASE\spring-expression-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\data\spring-data-commons\2.0.9.RELEASE\spring-data-commons-2.0.9.RELEASE.jar;E:\maven_repository_new\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;E:\maven_repository_new\org\springframework\boot\spring-boot-starter-web\2.0.4.RELEASE\spring-boot-starter-web-2.0.4.RELEASE.jar;E:\maven_repository_new\org\springframework\boot\spring-boot-starter-json\2.0.4.RELEASE\spring-boot-starter-json-2.0.4.RELEASE.jar;E:\maven_repository_new\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;E:\maven_repository_new\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\maven_repository_new\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;E:\maven_repository_new\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;E:\maven_repository_new\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;E:\maven_repository_new\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;E:\maven_repository_new\org\springframework\boot\spring-boot-starter-tomcat\2.0.4.RELEASE\spring-boot-starter-tomcat-2.0.4.RELEASE.jar;E:\maven_repository_new\org\apache\tomcat\embed\tomcat-embed-core\8.5.32\tomcat-embed-core-8.5.32.jar;E:\maven_repository_new\org\apache\tomcat\embed\tomcat-embed-el\8.5.32\tomcat-embed-el-8.5.32.jar;E:\maven_repository_new\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.32\tomcat-embed-websocket-8.5.32.jar;E:\maven_repository_new\org\hibernate\validator\hibernate-validator\6.0.11.Final\hibernate-validator-6.0.11.Final.jar;E:\maven_repository_new\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\maven_repository_new\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\maven_repository_new\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\maven_repository_new\org\springframework\spring-web\5.0.8.RELEASE\spring-web-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\spring-webmvc\5.0.8.RELEASE\spring-webmvc-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\spring-aop\5.0.8.RELEASE\spring-aop-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\boot\spring-boot-starter\2.0.4.RELEASE\spring-boot-starter-2.0.4.RELEASE.jar;E:\maven_repository_new\org\springframework\boot\spring-boot\2.0.4.RELEASE\spring-boot-2.0.4.RELEASE.jar;E:\maven_repository_new\org\springframework\boot\spring-boot-autoconfigure\2.0.4.RELEASE\spring-boot-autoconfigure-2.0.4.RELEASE.jar;E:\maven_repository_new\org\springframework\boot\spring-boot-starter-logging\2.0.4.RELEASE\spring-boot-starter-logging-2.0.4.RELEASE.jar;E:\maven_repository_new\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\maven_repository_new\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\maven_repository_new\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\maven_repository_new\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\maven_repository_new\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\maven_repository_new\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\maven_repository_new\org\springframework\spring-core\5.0.8.RELEASE\spring-core-5.0.8.RELEASE.jar;E:\maven_repository_new\org\springframework\spring-jcl\5.0.8.RELEASE\spring-jcl-5.0.8.RELEASE.jar;E:\maven_repository_new\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar" com.example.mongodb_demo3.MongodbDemo3Application.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.0.4.RELEASE)2019-07-25 11:02:00.022  INFO 104472 --- [           main] c.e.m.MongodbDemo3Application            : Starting MongodbDemo3Application on jujumao-456437486 with PID 104472 (E:\workspace_idea\mongodb_demo3\target\classes started by Administrator in E:\workspace_idea\mongodb_demo3)
2019-07-25 11:02:00.025  INFO 104472 --- [           main] c.e.m.MongodbDemo3Application            : No active profile set, falling back to default profiles: default
2019-07-25 11:02:00.057  INFO 104472 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@2aa3cd93: startup date [Thu Jul 25 11:02:00 CST 2019]; root of context hierarchy
2019-07-25 11:02:00.789  INFO 104472 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8088 (http)
2019-07-25 11:02:00.802  INFO 104472 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-07-25 11:02:00.802  INFO 104472 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.32
2019-07-25 11:02:00.805  INFO 104472 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_201\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;E:\w我的资料\软件\apache-maven-3.5.0-bin\apache-maven-3.5.0\bin;C:\Program Files\Java\jdk1.8.0_201\bin;C:\Program Files\Java\jdk1.8.0_201\lib\dt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\IDM Computer Solutions\UltraCompare;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\nodejs\;%ZOOKEEPER_HOME%\bin;C:\Users\Administrator\AppData\Local\Programs\Fiddler;C:\Users\Administrator\AppData\Roaming\npm;.]
2019-07-25 11:02:00.872  INFO 104472 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-07-25 11:02:00.872  INFO 104472 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 817 ms
2019-07-25 11:02:00.909  INFO 104472 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2019-07-25 11:02:00.912  INFO 104472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2019-07-25 11:02:00.913  INFO 104472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2019-07-25 11:02:00.913  INFO 104472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2019-07-25 11:02:00.913  INFO 104472 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2019-07-25 11:02:01.316  INFO 104472 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2019-07-25 11:02:01.316  INFO 104472 --- [           main] org.mongodb.driver.cluster               : Adding discovered server localhost:27017 to client view of cluster
2019-07-25 11:02:01.343  INFO 104472 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:185}] to localhost:27017
2019-07-25 11:02:01.343  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:184}] to localhost:27017
2019-07-25 11:02:01.345  INFO 104472 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 10]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=1547899}
2019-07-25 11:02:01.346  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:186}] to localhost:27017
2019-07-25 11:02:01.346  INFO 104472 --- [localhost:27017] org.mongodb.driver.cluster               : Discovered cluster type of STANDALONE
2019-07-25 11:02:01.348  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:4, serverValue:187}] to localhost:27017
2019-07-25 11:02:01.350  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:5, serverValue:188}] to localhost:27017
2019-07-25 11:02:01.352  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:6, serverValue:189}] to localhost:27017
2019-07-25 11:02:01.354  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:7, serverValue:190}] to localhost:27017
2019-07-25 11:02:01.355  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:8, serverValue:191}] to localhost:27017
2019-07-25 11:02:01.356  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:9, serverValue:192}] to localhost:27017
2019-07-25 11:02:01.358  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:10, serverValue:193}] to localhost:27017
2019-07-25 11:02:01.359  INFO 104472 --- [imer-1-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:11, serverValue:194}] to localhost:27017
2019-07-25 11:02:01.426  INFO 104472 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2019-07-25 11:02:01.427  INFO 104472 --- [           main] org.mongodb.driver.cluster               : Adding discovered server localhost:27017 to client view of cluster
2019-07-25 11:02:01.429  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:12, serverValue:195}] to localhost:27017
2019-07-25 11:02:01.429  INFO 104472 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:13, serverValue:196}] to localhost:27017
2019-07-25 11:02:01.429  INFO 104472 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 10]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=263831}
2019-07-25 11:02:01.429  INFO 104472 --- [localhost:27017] org.mongodb.driver.cluster               : Discovered cluster type of STANDALONE
2019-07-25 11:02:01.430  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:14, serverValue:197}] to localhost:27017
2019-07-25 11:02:01.432  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:15, serverValue:198}] to localhost:27017
2019-07-25 11:02:01.434  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:16, serverValue:199}] to localhost:27017
2019-07-25 11:02:01.435  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:17, serverValue:200}] to localhost:27017
2019-07-25 11:02:01.437  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:18, serverValue:201}] to localhost:27017
2019-07-25 11:02:01.439  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:19, serverValue:202}] to localhost:27017
2019-07-25 11:02:01.441  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:20, serverValue:203}] to localhost:27017
2019-07-25 11:02:01.444  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:21, serverValue:204}] to localhost:27017
2019-07-25 11:02:01.445  INFO 104472 --- [imer-3-thread-1] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:22, serverValue:205}] to localhost:27017
2019-07-25 11:02:01.477  INFO 104472 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-07-25 11:02:01.710  INFO 104472 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@2aa3cd93: startup date [Thu Jul 25 11:02:00 CST 2019]; root of context hierarchy
2019-07-25 11:02:01.751  INFO 104472 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/test]}" onto public java.lang.String com.example.mongodb_demo3.controller.TestController.test()
2019-07-25 11:02:01.757  INFO 104472 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2019-07-25 11:02:01.758  INFO 104472 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2019-07-25 11:02:01.777  INFO 104472 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-07-25 11:02:01.777  INFO 104472 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-07-25 11:02:01.843  INFO 104472 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2019-07-25 11:02:01.845  INFO 104472 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:23, serverValue:206}] to localhost:27017
2019-07-25 11:02:01.846  INFO 104472 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 10]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=329149}
2019-07-25 11:02:01.940  INFO 104472 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2019-07-25 11:02:01.963  INFO 104472 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8088 (http) with context path ''
2019-07-25 11:02:01.967  INFO 104472 --- [           main] c.e.m.MongodbDemo3Application            : Started MongodbDemo3Application in 2.196 seconds (JVM running for 3.054)

测试

浏览器输入 127.0.0.1:8088/test

观察idea运行日志 : 没有出现新建数据库连接,也就是说从连接池获取了连接。

源码

链接:https://pan.baidu.com/s/1riLsysiVFUg0A_quipDqCA
提取码:ijvq

最后

上一章最后提到过多个数据源配置有重复代码可以提取出一个抽象类,这里也是一样,自己去实现吧。

如果还想更直观的看连接池是否生效或者观察数据库连接数变化,可以通过观察数据库连接数。
下一章介绍 如何查看mongodb数据库连接数和最大连接数

springboot集成mongodb 连接池 多数据库源,源码demo相关推荐

  1. springboot集成lettuce连接池

    获取连接时流程图: 第一次访问时:RedisTemplate.java @Nullablepublic <T> T execute(RedisCallback<T> actio ...

  2. Springboot配置MongoDB连接池

    第一步:src/main/resources下新建配置文件application.properties #spring.data.mongodb是前缀,任意写 spring.data.mongodb. ...

  3. mybatisplus 集成druid连接池源码分析

    mybatisplus 集成druid连接池源码分析:从spring的源码过渡到druid的相关jar包,里面是druid相关的类,下面我们开始分析: 1.取数据库连接的地方入口:public abs ...

  4. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源

    全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...

  5. SpringBoot整合Druid连接池

    SpringBoot整合Druid连接池 前言 第一种整合方式 自定义的方式 引入Druid依赖 配置文件 配置类 实现监控功能 开启SQL防火墙 实现web应用 访问Druid页面需登录 第二种整合 ...

  6. SpringBoot集成MongoDB

    SpringBoot集成MongoDB Pom依赖 <dependency><groupId>org.springframework.boot</groupId>& ...

  7. SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,druid)

    SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,druid) 文章目录 SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,drui ...

  8. JDBC通过连接池链接数据库总是失败的解决办法

    应用服务器:glassfish JDBC通过连接池链接数据库总是失败,通过查看日志,发现是APACHE报DHCP 错误, 只需要通过访问4848端口的管理程序,重新PING下JDBC当前连接池即可.

  9. mongodb连接池 php,node.js,mongodb_nodejs使用mongodb连接池,node.js,mongodb - phpStudy

    nodejs使用mongodb连接池 在开发中想使用连接池 在网上找到了一段代码 但是自己测试的时候发现了些问题 当我把setTimeout中的语句数量变成五条以上的时候 nodejs会首先执行五条 ...

最新文章

  1. python教程下载地址-最新python实战教程网盘下载地址
  2. DevOps笔记-07:持续集成,持续交付,持续部署之间的区别
  3. python中的json注意事项
  4. 总结Selenium WebDriver中一些鼠标和键盘事件的使用
  5. Oracle 中调用外部C动态库函数
  6. 高并发→秒杀功能、难点共有数据排队、优化方案
  7. html编写个人博客_云开发平台开箱,3分钟零基础搭建个人Hexo博客
  8. 新唐N76E003与ST公司STM8S003F3芯片对比 史上最全的没有之一
  9. ArcGis软件出图时修改色带上的刻度并导出色带
  10. 买房注意事项收集(zt)
  11. Word中大括号内公式左对齐
  12. 烽火HG680-KA_310_免费升级刷机固件包及教程
  13. Windows server 2016密码重置
  14. FI---SAP汇率损益处理方法
  15. 换了爸爸,推特用户坐不住了……
  16. 支持win7的node.js版本+node和npm版本不匹配问题解决
  17. 【Java】一文秒懂http请求获取FlexManager平台FBox盒子信息
  18. 获取ALM中步骤数据
  19. ddraw 的blt 方法
  20. Eclipse解决输入简体中文汉字出现繁体字的问题和Eclipse中Ctrl+Shift+F整理代码格式的无效问题

热门文章

  1. mysql安慰_高考安慰人的话-2016安慰高考失利的话大全【暖心励志】最新整理版-东坡下载...
  2. 把UTF-8编码转换为GB2312编码
  3. 一名25岁的董事长给大学生的18条忠告
  4. [人脸活体检测] 论文:Aurora Guard- Real-Time Face Anti-Spoofing via Light Reflection
  5. 神卓互联是一款无需端口映射内网穿透软件
  6. 同一局域网内,调用其他同事本地服务接口配置
  7. 解压tar.xz以及tar.gz详解
  8. webp图片在html上显示,WebP 格式图片在实际项目中的使用方式
  9. 参加证券从业资格考试的收获
  10. NOIP前的狂欢(机房四日颓废)