您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

SpringBoot 配置多个MongoDB 数据源 基于spring-data-mongodb-3.0.2 实现

大家好!

最近一直在研究如何在springboot中如何配置多个mongodb数据源,查阅了很多网上的资料发现,很多示例都是很久以前示例了,在新版本的spring-data-mongodb-3.0.2 中已经不再支持网络上的大部分的示例了,如:基于 SimpleMongoDbFactory 的这种方已经被废弃删除了,应改用SimpleMongoClientDatabaseFactory 方式,经过一天的研究终于总结出了最新的配置方式供大家参考:

步骤如下:

1.在yaml 文件中 配置两个以上mongo 集群数据源

spring:
  data:
    mongodb:
      mpc:
        uri: mongodb://用户名:密码@ip:port,ip:port/database
      saas:
        uri: mongodb://用户名:密码@ip:port,ip:port/database

2.排除springboot默认的mongo初始化机制

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class MpcExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(MpcExampleApplication.class, args);
    }

}

 

3.生成多个MongoTemplate 并开启Repositor 操作并指定作用于哪个package

创建mongoSaasTemplate作用于"com.sun.mpc.example.storage.mongorpst.mpc" 下的Repositor 

/**
 * 初始化mcp mongoMpcTemplate
 * 如果不是多mongo数据源无需引入该配置
 * 注:开启多数据源配置需要排除springboot默认的mongo初始化机制
 * @SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
 * @author liangjian
 * @date
 */
@Slf4j
@Configuration
@EnableMongoRepositories(basePackages = "com.sun.mpc.example.storage.mongorpst.mpc", mongoTemplateRef = "mongoMpcTemplate")
public class MongoMpcTemplateConfig {

    @Value("${spring.data.mongodb.mpc.uri}")
    private String uri;

    @Primary
    @Bean(name = "mongoMpcTemplate")
    public MongoTemplate mongoMpcTemplate() throws Exception {
        log.info("-----------------------init mongoMpcTemplate success-----------------------------------");
        return new MongoTemplate(mongoMpcFactory());
    }

    @Bean
    @Primary
    public MongoDatabaseFactory mongoMpcFactory() throws Exception {
        SimpleMongoClientDatabaseFactory simpleMongoClientDbFactory = new SimpleMongoClientDatabaseFactory(uri);
        return simpleMongoClientDbFactory;
    }

}

创建mongoSaasTemplate作用于"com.sun.mpc.example.storage.mongorpst.saas" 下的Repositor 

/**
 * 初始化saas mongoSaasTemplate
 * 如果不是多mongo数据源无需引入该配置
 * 注:开启多数据源配置需要排除springboot默认的mongo初始化机制
 * @SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
 * @author liangjian
 * @date
 */
@Slf4j
@Configuration
@EnableMongoRepositories(basePackages = "com.sun.mpc.example.storage.mongorpst.saas", mongoTemplateRef = "mongoSaasTemplate")
public class MongoSaasTemplateConfig {

    @Value("${spring.data.mongodb.saas.uri}")
    private String uri;

    @Primary
    @Bean(name = "mongoSaasTemplate")
    public MongoTemplate mongoSaasTemplate() throws Exception {
        log.info("-----------------------init mongoSaasTemplate success-----------------------------------");
        return new MongoTemplate(mongoSaasFactory());
    }

    @Bean
    @Primary
    public MongoDatabaseFactory mongoSaasFactory() throws Exception {
        SimpleMongoClientDatabaseFactory simpleMongoClientDbFactory = new SimpleMongoClientDatabaseFactory(uri);
        return simpleMongoClientDbFactory;
    }

}

 

4.包结构截图
 

 

5.测试类

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource(properties={"spring.profiles.active=int"})
public class MongoRepositoryMultiSourceTest {

    @Autowired
    private MStudentTestEntityRepository mstudentTestEntityRepository;

    @Autowired
    private SStudentTestEntityRepository sstudentTestEntityRepository;


    @Test
    public void contextLoads() {

        mstudentTestEntityRepository.insert(MStudentTestEntity.builder()
                .name("woshi m")
                .age(20)
                .sex(true)
                .build());
        sstudentTestEntityRepository.insert(SStudentTestEntity.builder()
                .name("woshi s")
                .age(20)
                .sex(true)
                .build());
    }

}

 

最后虽然不是很详细,也没有具体说明原理,但是我想凡是对这块稍微有点了解跟研究的,一定能看懂。就这样吧 下班回家了


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进