提前声明下使用的是JAVA语言Maven打包依赖工具和springboot全家桶套餐
一、在pom.xm中引用依赖
现在这里提上一嘴,使用mongo数据库,必然会使用mongo集群,起码得两个节点,需要使用副本集
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
二、配置连接工厂
- 连接mongo分有用户账号密码和无账号密码两种方式
- 如果连接mongo集群可以把各个节点的IP和端口拼接即可,springData可以在其中找出主节点
配置文件中如下:连接方式有很多种,博主只是取了其中一种而已
如果同学想做多数据源的方案,可以把如下配置及其代码复制一个即可为多数据源
spring:
data:
mongodb:
uri: 192.168.1.101:27017,192.168.1.102:27017,192.168.1.103:27017
database: test
username: 'admin'
password: 'admin'
@Configuration
public class MongoConfig extends AbstractMongoConfiguration {
@Value("${spring.data.mongodb.uri}")
private String uri;
@Value("${spring.data.mongodb.database}")
private String database;
@Value("${spring.data.mongodb.username}")
private String username;
@Value("${spring.data.mongodb.password}")
private String password;
@Bean(name = "mongoDbFactory")
public MongoDbFactory mongoDbFactory() {
List<String> host = CollectionUtils.arrayToList(uri.split(","));
// 客户端
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectTimeout(10000);
builder.maxWaitTime(120000);
//数据库连接池其他参数,可以参考使用部分参数
builder.connectionsPerHost(150);
// builder.minConnectionsPerHost();
// builder.requiredReplicaSetName();
// builder.threadsAllowedToBlockForConnectionMultiplier();
// builder.serverSelectionTimeout();
// builder.maxConnectionIdleTime();
// builder.maxConnectionLifeTime();
// builder.socketTimeout();
// builder.socketKeepAlive();
// builder.sslEnabled());
// builder.sslInvalidHostNameAllowed();
// builder.alwaysUseMBeans();
// builder.heartbeatFrequency();
// builder.minHeartbeatFrequency();
// builder.heartbeatConnectTimeout();
// builder.heartbeatSocketTimeout();
// builder.localThreshold();
MongoClientOptions mongoClientOptions = builder.build();
// MongoDB地址列表,如果有多个ip地址,那么配置文件里面可以用逗号分隔ip地址,这里再把每一个ip地址和端口号添加进list里面
List<ServerAddress> serverAddresses = new ArrayList<>();
host.forEach(val ->{
serverAddresses.add(new ServerAddress(val));
});
//如果设置了用户名和密码的话
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(username, database, password.toCharArray());
// 创建认证客户端(存在用户名和密码)
MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredential, mongoClientOptions);
// 创建非认证客户端(没有设置mongodb数据库的用户名和密码)
//MongoClient mongoClient = new MongoClient(serverAddresses, mongoClientOptions);
// 创建MongoDbFactory
MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, database);
return mongoDbFactory;
}
//项目中就是用这个mongoTemplate使用CRUD操作了
//这个bean也适合双数据源的连接,需要把bean名称改掉mongo的IP用户名密码
@Bean(name = "mongoTemplate")
@Autowired
public MongoTemplate getMongoTemplate(MongoDbFactory mongoDbFactory){
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
return mongoTemplate;
}
//事务
@Bean
MongoTransactionManager transactionManager(MongoDbFactory mongoDbFactory){
MongoTransactionManager mtm = new MongoTransactionManager(mongoDbFactory);
mtm.setDefaultTimeout(1000 * 60 * 30);
mtm.setTransactionSynchronization(10);
return mtm;
}
@Override
public MongoClient mongoClient() {
MongoClientURI mongoUri = new MongoClientURI(uri);
return new MongoClient(mongoUri);
}
@Override
protected String getDatabaseName() {
return database;
}
}