SpringBoot MongoDB配置多数据源

日常开发中,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;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot中,我们可以使用MongoDB作为数据库,并且可以配置多个MongoDB数据源。为了实现这个目标,我们需要在配置文件中添加多个MongoDB数据源的URI,然后在代码中根据不同的数据源配置生成不同的MongoTemplate。具体实现可以参考以下步骤: 1.在配置文件中添加多个MongoDB数据源的URI,例如: spring.data.mongodb.uri=mongodb://localhost:27017/primary spring.data.mongodb.other.uri=mongodb://localhost:27017/other 2.创建一个配置类MultipleMongoConfig,根据不同的数据源配置生成不同的MongoTemplate,例如: @Configuration public class MultipleMongoConfig { @Value("${spring.data.mongodb.uri}") private String primaryUri; @Value("${spring.data.mongodb.other.uri}") private String otherUri; @Primary @Bean(name = "primaryMongoTemplate") public MongoTemplate primaryMongoTemplate() throws Exception { SimpleMongoClientDbFactory simpleMongoClientDbFactory = new SimpleMongoClientDbFactory(primaryUri); return new MongoTemplate(simpleMongoClientDbFactory); } @Bean(name = "otherMongoTemplate") public MongoTemplate otherMongoTemplate() throws Exception { SimpleMongoClientDbFactory simpleMongoClientDbFactory = new SimpleMongoClientDbFactory(otherUri); return new MongoTemplate(simpleMongoClientDbFactory); } } 3.创建一个主数据源配置类PrimaryMongoConfig,配置主数据源的MongoTemplate,例如: @Configuration @ConfigurationProperties(prefix="spring.data.mongodb") public class PrimaryMongoConfig extends AbstractMongoConfig{ @Primary @Bean(name="mongoTemplate") @Override public MongoTemplate getMongoTemplate() { return new MongoTemplate(mongoDbFactory()); } } 以上就是使用Spring Boot配置多个MongoDB数据源的方法。如果你需要使用更多的数据源,只需要在配置文件中添加更多的URI,并在代码中生成对应的MongoTemplate即可。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值