SpringBoot MongoDB配置多数据源

日常开发中,MongoDB可能会需要同时读取多个不同的库,此时就需要配置多数据源。话不多说,上代码

pom.xml引入mongodb依赖

        
		
			org.springframework.boot
			spring-boot-starter-data-mongodb
		

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;

你可能感兴趣的:(mongodb,spring,boot,java)