目录
如何在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<String,Object> 。
@Qualifier(GlobalConstants.TEST2_MONGO_TEMPLATE) @Autowired MongoTemplate test2MongoTemplate;
好了 到此多数据源配置已经完成。