上一篇介绍了 springboot mongodb 账号密码认证连接 源码demo
本篇在上次的基础上增加了连接池的配置
上一章重复的内容不再赘述了,直接介绍新增连接池的配置代码,最后附上源码demo
连接池配置文件 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
(实现这个类保存连接池配置是为了方便明了,不用这个类也是可以的,可以直接在db配置类中获取连接池配置的属性值)
package com.example.mongodb_password_demo.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;
}
}
TestdbMongoConfiguration
package com.example.mongodb_password_demo.config;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
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 java.util.ArrayList;
import java.util.List;
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.testdb")
public class TestdbMongoConfiguration {
// MongoDB Properties
private ArrayList<String> addresses;
private String credentialdatabase, credentialusername, credentialpassword, database;
public ArrayList<String> getAddresses() {
return addresses;
}
public void setAddresses(ArrayList<String> addresses) {
this.addresses = addresses;
}
public String getCredentialdatabase() {
return credentialdatabase;
}
public void setCredentialdatabase(String credentialdatabase) {
this.credentialdatabase = credentialdatabase;
}
public String getCredentialusername() {
return credentialusername;
}
public void setCredentialusername(String credentialusername) {
this.credentialusername = credentialusername;
}
public String getCredentialpassword() {
return credentialpassword;
}
public void setCredentialpassword(String credentialpassword) {
this.credentialpassword = credentialpassword;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
@Autowired
MongoSettingsProperties 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 = MongoCredential.createCredential(credentialusername, credentialdatabase, credentialpassword.toCharArray());
//创建认证客户端,设置连接池
MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredential, mongoClientOptions);
// 创建MongoDbFactory
MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, database);
return mongoDbFactory;
}
//第一个数据库 默认作为主数据库 需要添加注解 @Primary ,后面的数据库不需要这个注解
@Primary
@Bean(name = "testdbMongoTemplate")
public MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
其他重复内容不再介绍,若需要看上一章
链接:https://pan.baidu.com/s/1SBYMnVJbWlBI15jvioy5OA
提取码:wil2