SpringBoot中配置多个MongoDB数据源

编程入门 行业动态 更新时间:2024-10-27 12:35:09

下面是SpringBoot中实现多个数据源的步骤:

1、application.properties文件下的配置信息如下:

#数据源1
spring.data.mongodb.manag.database=management
spring.data.mongodb.manag.host=192.168.11.234
spring.data.mongodb.manag.port=27017
spring.data.mongodb.manag.password=lisi-123321
spring.data.mongodb.manag.username=lisi#数据源2
spring.data.mongodb.krdcz.database=db_cloud_device
spring.data.mongodb.krdcz.host=192.168.11.234
spring.data.mongodb.krdcz.port=27017
spring.data.mongodb.krdcz.password=lisi-123321
spring.data.mongodb.krdcz.username=lisi

2、创建一个MongoConfig配置类,注意:必须有一个是默认数据源,用@Primary注解标识

import java.util.ArrayList;
import java.util.List;import .springframework.beans.factory.annotation.Qualifier;
import .springframework.beans.factory.annotation.Value;
import .springframework.context.annotation.Bean;
import .springframework.context.annotation.Configuration;
import .springframework.context.annotation.Primary;
import .springframework.context.annotation.PropertySource;
import .springframework.data.mongodb.MongoDbFactory;
import .springframework.data.mongodb.core.MongoTemplate;
import .springframework.data.mongodb.core.SimpleMongoDbFactory;
import .springframework.data.mongodb.core.convert.DbRefResolver;
import .springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import .springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import .springframework.data.mongodb.core.convert.MappingMongoConverter;
import .springframework.data.mongodb.core.mapping.MongoMappingContext;
import .springframework.util.StringUtils;
import .mongodb.MongoClient;
import .mongodb.MongoClientOptions;
import .mongodb.MongoCredential;
import .mongodb.ReadPreference;
import .mongodb.ServerAddress;@Configuration
@PropertySource("classpath:application.properties")//application.properties配置文件路径
public class MongoConfig {@Value(value = "${spring.data.mongodb.manag.host}")private String host;@Value(value = "${spring.data.mongodb.manag.port}")private Integer port;// db_auth@Value(value = "${spring.data.mongodb.manag.database}")private String authDatabase;@Value(value = "${spring.data.mongodb.manag.username}")private String authUsername;@Value(value = "${spring.data.mongodb.manag.password}")private String authPassword;@Primary@Bean@Value("mongoTemplate")//这个是默认数据源,这里的名字和后面注入的变量名要一致public MongoTemplate mongoTemplate() throws Exception {MongoDbFactory authFactory = mongoFactory(host, port, authUsername, authPassword, authDatabase);MappingMongoConverter mappingMongoConverter = mappingMongoConverter(authFactory);MongoTemplate mongoTemplate = new MongoTemplate(authFactory, mappingMongoConverter);ReadPreference preference = ReadPreference.secondary();mongoTemplate.setReadPreference(preference);return mongoTemplate;}@Primary@Beanpublic MongoDbFactory mongoFactory(String host, Integer port, String username, String password, String database)throws Exception {if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {return new SimpleMongoDbFactory(new MongoClient(host, port), database);}MongoClientOptions.Builder builder = new MongoClientOptions.Builder();builder.threadsAllowedToBlockForConnectionMultiplier(10);MongoClientOptions mongoClientOptions = builder.build();ServerAddress serverAddress = new ServerAddress(host, port);List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();credentialsList.add(MongoCredential.createScramSha1Credential(username, database, password.toCharArray()));return new SimpleMongoDbFactory(new MongoClient(serverAddress, credentialsList, mongoClientOptions), database);}@Primary@Beanpublic MappingMongoConverter mappingMongoConverter(MongoDbFactory factory) {DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, new MongoMappingContext());mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));return mappingConverter;}//下面是开始配置第二个数据源,如果想继续添加第三个数据源,就再复制一遍下面的代码修改一下参数@Value(value = "${spring.data.mongodb.krdcz.host}")private String aountHost;@Value(value = "${spring.data.mongodb.krdcz.port}")private Integer aountPort;@Value(value = "${spring.data.mongodb.krdcz.database}")private String aountDatabase;@Value(value = "${spring.data.mongodb.krdcz.username}")private String aountUsername;@Value(value = "${spring.data.mongodb.krdcz.password}")private String aountPassword;@Qualifier@Bean@Value("kdmongoTemplate")//这个是第二个数据源,这里的名字和后面注入的变量名要一致public MongoTemplate aountMongoTemplate() throws Exception {MongoDbFactory authFactory = aountMongoFactory(aountHost, aountPort, aountUsername, aountPassword, aountDatabase);MappingMongoConverter mappingMongoConverter = mappingMongoConverter(authFactory);	MongoTemplate mongoTemplate = new MongoTemplate(authFactory, mappingMongoConverter);ReadPreference preference = ReadPreference.secondary();mongoTemplate.setReadPreference(preference);return mongoTemplate;}@Qualifier@Beanpublic MongoDbFactory aountMongoFactory(String host, Integer port, String username, String password, String database)throws Exception {if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { return new SimpleMongoDbFactory(new MongoClient(host, port), database); }MongoClientOptions.Builder builder = new MongoClientOptions.Builder();builder.threadsAllowedToBlockForConnectionMultiplier(10);MongoClientOptions mongoClientOptions = builder.build();ServerAddress serverAddress = new ServerAddress(host, port);List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();credentialsList.add(MongoCredential.createScramSha1Credential(username,database, password.toCharArray())); return new SimpleMongoDbFactory(new MongoClient(serverAddress, credentialsList,mongoClientOptions),database);}}

3、在业务代码中注入数据源

	@Autowiredprivate MongoTemplate mongoTemplate;//默认数据源,这里的变量名要和上面配置数据源时的变量名一致@Qualifier@Autowiredprivate MongoTemplate kdmongoTemplate;//第二个数据源,这里的变量名要和上面配置数据源时的变量名一致

配置完成。

更多推荐

多个,数据源,SpringBoot,MongoDB

本文发布于:2023-05-25 00:26:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/218681.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   数据源   SpringBoot   MongoDB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!