关于mongo多数据源的处理
hello,各位小伙伴大家好,我是小王子~,一名JAVA搬砖程序员,今天给大家分享一下,在项目过程中碰到的一个小问题吧。
大家都知道mongo是一个非关系型数据库,在mongo里面我们通过指定的database去里面找到对应的collection,具体的话就是用到MongoTemplate模板对象去进行对mongo的crud操作了。
那么在使用过程中,碰到了mongo的多数据源操作,该如何处理呢?
1、定义对应的配置文件
首先我们在properties文件中去配置以下图片内容。
如图所示的内容就是两个数据源的配置了,
两个及以上的可以依次类推,比葫芦画瓢。
2、创建一个读取配置文件的类
@Component
//从配置文件中读取开头为mongodb的配置属性
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {
private MongoProperties primary = new MongoProperties();
//如果有第三个就一次定义和进行set和get赋值处理,**比葫芦画瓢以此类推**
private MongoProperties secondary = new MongoProperties();
public MongoProperties getPrimary() {
return primary;
}
public void setPrimary(MongoProperties primary) {
this.primary = primary;
}
public MongoProperties getSecondary() {
return secondary;
}
public void setSecondary(MongoProperties secondary) {
this.secondary = secondary;
}
}
// An highlighted block
@Component
//从配置文件中读取开头为mongodb的配置属性
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {
private MongoProperties primary = new MongoProperties();
private MongoProperties secondary = new MongoProperties();
//如果有第三个就一次定义和进行set和get赋值处理,**比葫芦画瓢以此类推**
public MongoProperties getPrimary() {
return primary;
}
public void setPrimary(MongoProperties primary) {
this.primary = primary;
}
public MongoProperties getSecondary() {
return secondary;
}
public void setSecondary(MongoProperties secondary) {
this.secondary = secondary;
}
}
3、创建数据源对应的mongotemplate配置类
下图是自定义的第二个数据源,然后其他数据源类似,比葫芦画瓢。
@Configuration
//代表的是我们自定义的mongoTemplate模板对象
@EnableMongoRepositories(mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
public static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}
// An highlighted block
@Configuration
//代表的是我们自定义的mongoTemplate模板对象
@EnableMongoRepositories(mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
public static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}
4、实现Bean注入自定义的mongoTemplate对象
最后一步,也是最重要的一步。
@Configuration
public class MultipleMongoConfig {
//首先对我们创建的读取mongo配置文件的类进行注入
@Autowired
private MultipleMongoProperties mongoProperties;
//一定要定义一个主数据源,也就是primary数据源,我们直接和配置文件保持一致即可。
@Primary
//这个注入的名称就是我们已经定义的mongoTemplate的name。
@Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate primaryMongoTemplate() throws Exception {
MongoProperties primary = this.mongoProperties.getPrimary();
String uri = primary.getUri();
MongoClientURI mongoClientURI = new MongoClientURI(uri);
//此方式是通过mongo的URI方式进行连接
MongoClient mongoClient = new MongoClient(mongoClientURI);
return new MongoTemplate(mongoClient, primary.getDatabase());
}
//注入其他数据源的操作。
@Bean
//定义其他数据源的名称。
@Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate secondaryMongoTemplate() throws Exception {
MongoProperties secondary = this.mongoProperties.getSecondary();
String uri = secondary.getUri();
MongoClientURI mongoClientURI = new MongoClientURI(uri);
//同样的,此方式是通过mongo的URI方式进行连接
MongoClient mongoClient = new MongoClient(mongoClientURI);
return new MongoTemplate(mongoClient, secondary.getDatabase());
}
}
// An highlighted block
@Configuration
public class MultipleMongoConfig {
//首先对我们创建的读取mongo配置文件的类进行注入
@Autowired
private MultipleMongoProperties mongoProperties;
//一定要定义一个主数据源,也就是primary数据源,我们直接和配置文件保持一致即可。
@Primary
//这个注入的名称就是我们已经定义的mongoTemplate的name。
@Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate primaryMongoTemplate() throws Exception {
MongoProperties primary = this.mongoProperties.getPrimary();
String uri = primary.getUri();
MongoClientURI mongoClientURI = new MongoClientURI(uri);
//此方式是通过mongo的URI方式进行连接
MongoClient mongoClient = new MongoClient(mongoClientURI);
return new MongoTemplate(mongoClient, primary.getDatabase());
}
//注入其他数据源的操作。
@Bean
//定义其他数据源的名称。
@Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate secondaryMongoTemplate() throws Exception {
MongoProperties secondary = this.mongoProperties.getSecondary();
String uri = secondary.getUri();
MongoClientURI mongoClientURI = new MongoClientURI(uri);
//同样的,此方式是通过mongo的URI方式进行连接
MongoClient mongoClient = new MongoClient(mongoClientURI);
return new MongoTemplate(mongoClient, secondary.getDatabase());
}
}
Finally:以上是关于mongo多数据源的配置,如果有哪里没有提及到的地方,还请各位大佬补充和指教,作者在这里谢过各位大佬!
Everyone have a good dream,If you want,and do it,The dream will come true In the fruture.
Last but not least,
注:转载请联系作者!
WeChat:13160339561