一、相关依赖

1
2
3
4
5
6
7
<dependencies>
<!-- Spring Boot Starter for MongoDB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>

二、配置文件

2.1 单节点

1
2
3
4
5
6
7
8
9
spring:
data:
mongodb:
host: localhost
port: 27017
database: your_database_name
username: your_username
password: your_password
authentication-database: admin # 如果需要
1
2
3
4
5
6
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=your_database_name
spring.data.mongodb.username=your_username
spring.data.mongodb.password=your_password
spring.data.mongodb.authentication-database=admin

2.2 分片集

如果使用的是 MongoDB 的 Sharded Cluster(分片集群)模式,你需要配置多个 Mongos 路由节点的地址。

1
2
3
4
spring:
data:
mongodb:
uri: mongodb://username:password@mongos1:27017,mongos2:27017/your_database_name
1
spring.data.mongodb.uri=mongodb://username:password@mongos1:27017,mongos2:27017/your_database_name

mongos1, mongos2: MongoDB 分片集群中的路由节点(Mongos)的地址。

2.3 副本集

如果你使用的是 MongoDB 的 Replica Set(副本集)模式,需要在配置文件中指定所有副本节点的地址。

1
2
3
4
spring:
data:
mongodb:
uri: mongodb://username:password@host1:27017,host2:27017,host3:27017/your_database_name?replicaSet=your_replica_set_name
1
spring.data.mongodb.uri=mongodb://username:password@host1:27017,host2:27017,host3:27017/your_database_name?replicaSet=your_replica_set_name
  • usernamepassword: 你的 MongoDB 认证用户名和密码。
  • host1, host2, host3: MongoDB 副本集中各个节点的地址。
  • your_database_name: 要使用的数据库名称。
  • replicaSet: 你配置的副本集的名称。

2.4 分片副本集

要连接一个 2 分片 3 副本的 MongoDB 集群,你需要连接到多个 Mongos 实例(分片集群的路由节点),并确保配置了副本集的参数。以下是具体的配置步骤:

2.4.1 了解架构

  • 2 分片(Shards): 数据被分布到两个不同的分片上,每个分片可能有多个副本。
  • 3 副本(Replica Sets): 每个分片都有三个副本,用于提高数据的可用性和可靠性。
  • Mongos 实例: 分片集群中的路由节点,客户端通过连接到这些节点进行数据操作。

2.4.2 配置连接 URI

你需要在 spring.data.mongodb.uri 中指定所有 Mongos 节点的地址,并添加副本集的配置。通常,你只需要连接到一组 Mongos 节点,因为它们会自动处理分片和副本集的细节。

application.yml 示例:

1
2
3
4
spring:
data:
mongodb:
uri: mongodb://username:password@mongos1:27017,mongos2:27017/your_database_name?ssl=true
1
spring.data.mongodb.uri=mongodb://username:password@mongos1:27017,mongos2:27017/your_database_name?ssl=true
  • usernamepassword: 你的 MongoDB 认证用户名和密码。
  • mongos1, mongos2: 你的两个 Mongos 节点的地址。
  • your_database_name: 你要使用的数据库名称。
  • ssl=true: 启用 SSL/TLS 加密连接(如果你的集群启用了 SSL)。

2.4.3 处理连接参数

可以添加更多连接参数来优化连接,特别是在使用分片和副本集时。以下是一些常见的连接参数:

  • readPreference=nearest: 选择读取数据时的优先级策略,nearest 会选择最近的节点读取数据。
  • w=majority: 写入数据时的确认级别,majority 确保数据写入到大多数节点。
  • maxPoolSize=100: 设置连接池的最大大小。

2.5 自定义 MongoClient 配置(可选)

在有些情况下,你可能希望自定义 MongoClient 的配置,例如调整连接池大小、超时设置等。你可以通过以下方式自定义 MongoClient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

import java.util.Arrays;

@Configuration
public class MongoConfig {
@Bean
public MongoTemplate mongoTemplate() {
MongoClientSettings settings = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(
new ServerAddress("host1", 27017),
new ServerAddress("host2", 27017),
new ServerAddress("host3", 27017)
))
)
.build();

return new MongoTemplate(MongoClients.create(settings), "your_database_name");
}
}