spring boot MongoDB 多数据源配置(包含template和repository)


1.需求

业务要求在一个spring项目中访问位于两个不同位置的mongodb数据库实例

2.思路

单个mongo 配置时,使用springdatamongodb 可以很方便的在配置文件中配置数据源.类似于

spring.data.mongodb.uri=mongodb://localhost:27017/test

两个数据源时不能这样方便的使用,需要自己去导入相应的数据源配置.

3.动手

Step1

在application.yaml中配置好需要的多数据源数据库链接地址

spring:

  mongodb:

    db1:

      uri: mongodb://localhost:27017/db1

    db2:

      uri: mongodb://localhost:27017/db2

Step2

有了数据源之后,考虑如何使用这两个数据源.本着从一到二的原则,先创建第一个数据源配置类 mongoConfig.java

注解表明是配置类

@Configuration

//为了实现mongorepository的多数据源才这么操作.如果只是使用template,并不需要开启这个选项.

//这里的mongoTemplateRef指定repository需要使用到template.这个配置类既声明了两个tempplate,又指定了一个repository.

//basePackages 代表使用这个repository的接口所在的包

@EnableMongoRepositories(basePackages = "com.*.*dao", mongoTemplateRef = "template1")

public class mongoConfig {

  //从配置文件中获得第一个数据源的uri

  @Value("${spring.mongodb.db2.uri}")

  private String db2_url;

//第二个数据源

  @Value("${spring.mongodb.db1.uri}")

  private String db1_url;

  @Bean(name = "template1")

  public MongoTemplate template1() {

    return new MongoTemplate(db1MongoDatabaseFactory());

  }

  @Bean

  public MongoDatabaseFactory db1MongoDatabaseFactory() {

    return new SimpleMongoClientDatabaseFactory(db1_url);

  }

  //多数据源时,必须要保证有一个primary的mongoTemplate

  @Bean

  @Primary

  public MongoDatabaseFactory db2MongoDatabaseFactory() {

//获得factory的重载方法有很多,我喜欢这种直接一个完整uri的形式

    return new SimpleMongoClientDatabaseFactory(db2_url);

  }

  @Primary

  @Bean(name = "template2")

  public MongoTemplate template2() {

    return new MongoTemplate(db2MongoDatabaseFactory());

  }

}

上面这个类完成了几个动作

1.读取配置

2.声明两个template

3.声明一个repository及使用这个repository的接口所在的位置

注意:扫描包的位置和template引用要正确.

Step3

那么接下来只要再声明一个配置类来启用第二个repository就可以了.

@Configuration

@EnableMongoRepositories(basePackages = "com.*.*.dao2", mongoTemplateRef = "template2")

public class SecondMongoConfig {

}

Ps: 关于使用template,只需要使用qualifier表明同类型但是不同名字的template即可选用想要的template.

  @Autowired()

  @Qualifier("template2")

  MongoTemplate mongoTemplate;

你可能感兴趣的:(spring boot MongoDB 多数据源配置(包含template和repository))