1. 添加依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!-- .. --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> </dependencies>2. 在配置文件中添加属性
在application.properties中或者自定义的属性文件中添加属性。
# 这里添加在了application.properties中 mongo.address=localhost:27001,localhost:27002,localhost:27003 mongo.replica-set=reolicaName mongo.database=databaseName mongo.username=sherry mongo.password=123456 mongo.options.min-connections-per-host=20 mongo.options.max-connections-per-host=20 mongo.options.threads-allowed-to-block-for-connection-multiplier=5 mongo.options.server-selection-timeout=30000 mongo.options.max-wait-time=120000 mongo.options.max-connection-idel-time=0 mongo.options.max-connection-life-time=0 mongo.options.connect-timeout=10000 mongo.options.socket-timeout=0 mongo.options.socket-keep-alive=false mongo.options.ssl-enabled=false mongo.options.ssl-invalid-host-name-allowed=false mongo.options.always-use-m-beans=false mongo.options.heartbeat-socket-timeout=20000 mongo.options.heartbeat-connect-timeout=20000 mongo.options.min-heartbeat-frequency=500 mongo.options.heartbeat-frequency=10000 mongo.options.local-threshold=15
3. 把配置文件映射为Java Bean
(value = "classpath:application.properties") (prefix = "mongo") public class MongoSettingsProperties { private String database; private List<String> address; private String replicaSet; private String username; private String password; 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 heartbeatFrequency = 10000; private Integer minHeartbeatFrequency = 500; private Integer heartbeatConnectTimeout = 20000; private Integer heartbeatSocketTimeout = 20000; private Integer localThreshold = 15; private String authenticationDatabase; public MongoSettingsProperties() { } public String getDatabase() { return database; public void setDatabase(String database) { this.database = database; public String getReplicaSet() { return replicaSet; public void setReplicaSet(String replicaSet) { this.replicaSet = replicaSet; 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 Integer getMinConnectionsPerHost() { return minConnectionsPerHost; public void setMinConnectionsPerHost(Integer minConnectionsPerHost) { this.minConnectionsPerHost = minConnectionsPerHost; public List<String> getAddress() { return address; public void setAddress(List<String> address) { this.address = address; 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 getHeartbeatFrequency() { return heartbeatFrequency; public void setHeartbeatFrequency(Integer heartbeatFrequency) { this.heartbeatFrequency = heartbeatFrequency; public Integer getMinHeartbeatFrequency() { return minHeartbeatFrequency; public void setMinHeartbeatFrequency(Integer minHeartbeatFrequency) { this.minHeartbeatFrequency = minHeartbeatFrequency; 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 getLocalThreshold() { return localThreshold; public void setLocalThreshold(Integer localThreshold) { this.localThreshold = localThreshold; public String getAuthenticationDatabase() { return authenticationDatabase; public void setAuthenticationDatabase(String authenticationDatabase) { this.authenticationDatabase = authenticationDatabase; }
4. 配置mongoDbFactory并向spring容器中注入
public class MongoConfig { //覆盖默认的MongoDbFacotry public MongoDbFactory mongoDbFactory(MongoSettingsProperties properties) { //客户端配置(连接数,副本集群验证) MongoClientOptions.Builder builder = new MongoClientOptions.Builder(); builder.connectionsPerHost(properties.getMaxConnectionsPerHost()); builder.minConnectionsPerHost(properties.getMinConnectionsPerHost()); if (properties.getReplicaSet() != null) { builder.requiredReplicaSetName(properties.getReplicaSet()); 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.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<>(); for (String address : properties.getAddress()) { String[] hostAndPort = address.split(":"); String host = hostAndPort[0]; Integer port = Integer.parseInt(hostAndPort[1]); ServerAddress serverAddress = new ServerAddress(host, port); serverAddresses.add(serverAddress); //System.out.println("serverAddresses:" + serverAddresses.toString()); // 连接认证 MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(properties.getUsername(), properties.getAuthenticationDatabase() != null ? properties.getAuthenticationDatabase() : properties.getDatabase(), properties.getPassword().toCharArray()); //创建客户端和Factory MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredential, mongoClientOptions); MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, properties.getDatabase()); return mongoDbFactory; }
5. 使用MongoTemplate
配置完MongoDbFactory后就可以使用MongoTemplate了。
public class MongoService { private MongoTemplate mongoTemplate; //.. }
或者继承MongoRepository
public interface DemoRepository extends MongoRepository<Speech, String> { }
文章来源: Spring Boot配置MongoDB连接池