好久没写日志了。主要也是没遇到啥想记录的。
这次想配置一个双数据源。 看了一圈百度。 看了一圈官方文档。 介绍也不全面。
磕磕绊绊。参考很多博客。以及看了看源码才弄了好。
秉承着前人摘树后人乘凉的原则。。。。算了 不比比了
直接贴代码。 一共就2步。直接搞定。
帮助到你记得点个赞哦
步骤一:配置文件
data:
mongodb:
master:
host: 127.0.0.1
port: 27017
username: username
password: pd
database: db
tx:
host: 127.0.0.2
port: 27017
username: username
password: pd
database: db
步骤二:设置配置类,这里需要注意一下。 自己的模式。我的第二个数据源是副本集模式。 如果是集群模式的话 换一下枚举即可
package com.fp.pileorder.config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.connection.ClusterConnectionMode;
import com.mongodb.connection.ClusterType;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
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.SimpleMongoClientDbFactory;
@Configuration
public class MongodbConfiguration {
@Primary
@Bean(name = "mongoMasterProperties")
@ConfigurationProperties(prefix = "spring.data.mongodb.master")
public MongoProperties mongoMasterProperties () {
return new MongoProperties();
}
@Bean(name = "mongoTxProperties")
@ConfigurationProperties(prefix = "spring.data.mongodb.tx")
public MongoProperties mongoTxProperties () {
return new MongoProperties();
}
@Primary
@Bean("mongoTemplate")
public MongoTemplate mongoMasterTemplate (@Qualifier("mongoMasterProperties") MongoProperties mongoProperties) {
return new MongoTemplate(mongoDbFactory(mongoProperties, false));
}
@Bean("mongoTxTemplate")
public MongoTemplate mongoTxTemplate (@Qualifier("mongoTxProperties") MongoProperties mongoProperties) {
String host = mongoProperties.getHost();
String[] split = host.split(",");
return new MongoTemplate(mongoDbFactory(mongoProperties, split.length > 1 ? true : false));
}
public MongoDbFactory mongoDbFactory (MongoProperties mongoProperties, boolean isCluster) {
ClusterConnectionMode clusterConnectionMode;
ClusterType clusterType;
List<ServerAddress> serverAddressList = new ArrayList<>();
//是否是集群模式
if (isCluster) {
clusterConnectionMode = ClusterConnectionMode.MULTIPLE;
clusterType = ClusterType.REPLICA_SET;
String host = mongoProperties.getHost();
String[] split = host.split(",");
for (String urlHost : split) {
serverAddressList.add(new ServerAddress(urlHost, mongoProperties.getPort()));
}
} else {
clusterConnectionMode = ClusterConnectionMode.SINGLE;
clusterType = ClusterType.STANDALONE;
ServerAddress serverAddress = new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort());
serverAddressList.add(serverAddress);
}
MongoCredential credential = MongoCredential.createCredential(mongoProperties.getUsername(), mongoProperties.getDatabase(),
mongoProperties.getPassword());
MongoClientSettings setting = MongoClientSettings.builder()
.credential(credential)
.applyToClusterSettings(builder ->
builder.hosts(serverAddressList)
.mode(clusterConnectionMode)
.requiredClusterType(clusterType)
).build();
MongoClient mongoClient = MongoClients.create(setting);
return new SimpleMongoClientDbFactory(mongoClient, mongoProperties.getDatabase());
}
}
步骤三:直接使用 ,想在哪使用 注入进去就行了
@Resource
@Qualifier("mongoTemplate")
private MongoTemplate mongoTemplate;
@Resource
@Qualifier("mongoTxTemplate")
private MongoTemplate mongoTxTemplate;