springboot MongoDB 简单的多数据源的配置

目录

如何在springboot 里配置MongoDB  多数据源呢?

第一步:首先在yml文件里配置多个数据源的信息:

mongodb:
  test1:
    uri: mongodb://localhost
    database: test1
  test2:
    uri: mongodb://localhost
    database: test2
  test3:
    uri: mongodb://localhost
    database: test3
  test4:
    uri: mongodb://localhost
    database: test4

第二步: 定义一个自动装配的类 

@ConfigurationProperties(prefix = "mongodb") 这个注解是让springboot加载配置文件的时候找到是由哪个key下的values。

/**
 * @author yangyangchu
 * @desc MultipleMongoProperties
 * @date 13:03 2019/10/22
 */
@Data
@Component
@ConfigurationProperties(prefix = "mongodb")
class AutoMongoProperties {
    private MongoProperties test1= new MongoProperties();
    private MongoProperties test2= new MongoProperties();
    private MongoProperties test3= new MongoProperties();
    private MongoProperties test4= new MongoProperties();
}

MongoProperties 会自动填充上uri 和database 这2个字段 

然后开始初始化4个MongoDB的template

@Component
@Configuration
public class MultipleMongoConfig {

    @Autowired
    private AutoMongoProperties mongoProperties;

    @Primary
    @Bean(name = GlobalConstants.TEST1_MONGO_TEMPLATE)
    public MongoTemplate test1MongoTemplate() throws Exception {
        MongoProperties test1= mongoProperties.getTest1();
        MongoClient client = new MongoClientImpl(MongoClientSettings.builder()
                .applyConnectionString(new ConnectionString(test1.getUri())).build(), null);
        return new MongoTemplate(client, test1.getDatabase());
    }
}

此处只写一个 其他几个同理 重点是

@Qualifier(GlobalConstants.TEST2_MONGO_TEMPLATE) 给每个相同类型但是不同地址的template附上别名 默认其中一个为primary

现在已经有了4个模板了 在服务类中如果要使用其中一个就可以使用@Qualifier 指定需要加载的模板是哪一个,注意的是Qualifier里不要全部写大写,原因是springboot会使用全类名转驼峰做key来区别到底是哪个bean 说白了就是map

@Qualifier(GlobalConstants.TEST2_MONGO_TEMPLATE)
@Autowired
MongoTemplate test2MongoTemplate;

好了 到此多数据源配置已经完成。

你可能感兴趣的:(java,MongoDB)