日常开发中,MongoDB可能会需要同时读取多个不同的库,此时就需要配置多数据源。话不多说,上代码
pom.xml引入mongodb依赖
<!-- mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
yml配置文件中配置多个数据库连接
spring:
data:
mongodb:
base:
uri: mongodb://10.200.36.217:27017/nstl
emp:
uri: mongodb://10.200.36.216:27017/nstl
下面是配置mongoTemplate多个实例
首先配置base的实例
@Configuration
@EnableMongoRepositories(mongoTemplateRef = "mongoTemplate")//指定注入名称
public class MongodbConfig{
//从配置文件注入地址
@Value("${spring.data.mongodb.base.uri}")
private String uri;
//用mongo工厂创建mongoTemplate 、并指定bean的名称
@Primary
@Bean(name = "mongoTemplate")
public MongoTemplate statisMongoTemplate() throws Exception {
//删除mongo由类创建集合时默认生成的类字段
MappingMongoConverter c =
new MappingMongoConverter(statisFactory(), new MongoMappingContext());
c.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(statisFactory(), c);
}
//创建mongo实例工厂
@Bean
@Primary
public MongoDbFactory statisFactory() throws Exception {
//指定最大链接时间和超时时间
return new SimpleMongoDbFactory(new MongoClient(new MongoClientURI(uri, MongoClientOptions.builder().maxConnectionIdleTime(30000).connectTimeout(5000))), "nstl");
}
}
然后配置emp的实例
@Configuration
@EnableMongoRepositories(mongoTemplateRef = "empMongoTemplate")
public class EmpMongoConfig {
@Value("${spring.data.mongodb.emp.uri}")
private String uri;
@Bean(name = "empMongoTemplate")
public MongoTemplate listTemplate() throws Exception {
//remove _class
MappingMongoConverter c =
new MappingMongoConverter(empMongoFactory(), new MongoMappingContext());
c.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(empMongoFactory(), c);
}
@Bean
public MongoDbFactory empMongoFactory() throws Exception {
return new SimpleMongoDbFactory(new MongoClient(new MongoClientURI(uri, MongoClientOptions.builder().maxConnectionIdleTime(30000).connectTimeout(5000))), "nstl");
}
}
最后修改启动类:
若出现链接超时问题、则需排除自动注入,在spingboot启动类中加入下面代码
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
应用实例注入代码如下
@Autowired
@Qualifier("empMongoTemplate")
private MongoTemplate empMongoTemplate;
@Autowired
@Qualifier("mongoTemplate")
private MongoTemplate mongoTemplate;