springboot版本2.4.5
现在网上的文章大部分都是关于2.2版本以下的springboot,集成多数据源mongdb的。所以,在这记录一篇高版本的配置。废话不多说直接开始。
首先pom引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring:
data:
mongodb:
test: #自定义库命
authSource: admin #mongdb 开启认证 指定认证数据库
database: test #连接数据库
host: 192.168.10.1 #数据库地址
port: 27017 #数据库端口
password: root #数据库登陆账号
username: 123456 #数据库登陆密码
test1: #自定义库命
authSource: admin #mongdb 开启认证 指定认证数据库
database: test #连接数据库
host: 192.168.10.1 #数据库地址
port: 27017 #数据库端口
password: root #数据库登陆账号
username: 123456 #数据库登陆密码
定义抽象类进行连接mongodb
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.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoDatabaseFactorySupport;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import java.util.Arrays;
/**
* @ClassName AbstractMongoConfig
* @Description:
* @Author lh
* @Date 2021/8/23
**/
public abstract class AbstractMongoConfig {
//定义相关连接数据库参数
private String host, database, username, password, authSource;
private int port;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
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 int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getAuthSource() {
return authSource;
}
public void setAuthSource(String authSource) {
this.authSource = authSource;
}
/**
* 创建MongoDbFactory,不同数据源继承该方法创建对应的MongoDbFactory。
* @return
* @throws Exception
*/
public MongoDatabaseFactory mongoDbFactory() throws Exception {
MongoCredential credential = MongoCredential.createCredential(username, authSource, password.toCharArray());
MongoClientSettings setting=MongoClientSettings.builder()
.credential(credential)
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress(host, port)))
.mode(ClusterConnectionMode.SINGLE)
.requiredClusterType(ClusterType.STANDALONE)
).build();
return new SimpleMongoClientDatabaseFactory(MongoClients.create(setting), database);
}
/**
* 抽象方法,用于返回MongoTemplate
* @param context
* @return
* @throws Exception
*/
abstract public MongoTemplate getMongoTemplate(MongoMappingContext context) throws Exception;
}
定义不同的连接mongodb实例
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
/**
* @ClassName test
* @Description:
* @Author lh
* @Date 2021/8/23
**/
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.test")
public class testMgDbConfig extends AbstractMongoConfig{
@Override
@Bean("testMongoTemplate")
public MongoTemplate getMongoTemplate(MongoMappingContext context) throws Exception {
//去除保存实体时,spring data mongodb 自动添加的_class字段
MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory()), context);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);
return mongoTemplate;
}
}
到此就整合完毕,在要用的类中引用对应的 MongoTemplate
@Autowired
@Qualifier(value = "testMongoTemplate")
private MongoTemplate testMongoTemplate;