spring-data-mongodb 配置和使用多个 mongoTemplate

有时候需要使用多个mongoTemplate访问两个不同的mongodb实例,此时(在spring-boot的情况下)无法使用默认配置,只能手动配了。
1、引入依赖(以spring-boot为例)
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2、配置文件中配置两个mongodb uri(也可以配成两个host/port)
spring:
  profiles: dev
  data:
    mongodb:
      uri: mongodb://192.168.0.9:27017/log1DbName
    mongodb2:
      uri: mongodb://192.168.0.11:27017/log2DbName

3、配置文件出场:
@Configuration
public class MongoConfig{
   //@Value("${mongo.host}")
   @Value("${spring.data.mongodb.uri}")
   private String MONGO_URI1;
   @Value("${spring.data.mongodb2.uri}")
   private String MONGO_URI2;

   @Bean
   public MongoMappingContext mongoMappingContext() {
      MongoMappingContext mappingContext = new MongoMappingContext();
      return mappingContext;
   }

   // ==================== 连接到 mongodb1 服务器 ======================================

   @Bean //使用自定义的typeMapper去除写入mongodb时的“_class”字段
   public MappingMongoConverter mappingMongoConverter1() throws Exception {
      DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(this.dbFactory1());
      MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext());
      converter.setTypeMapper(new DefaultMongoTypeMapper(null));
      return converter;
   }

   @Bean
   @Primary
   public MongoDbFactory dbFactory1() throws UnknownHostException {
      return new SimpleMongoDbFactory(new MongoClientURI(MONGO_URI1));
   }

   @Bean
   @Primary
   public MongoTemplate mongoTemplate1() throws Exception {
      return new MongoTemplate(this.dbFactory1(), this.mappingMongoConverter1());
   }

   // ===================== 连接到 mongodb2 服务器 =================================
//不需要去除写入mongodb时的“_class”字段

/* //可以使用Mongo或MongoDbFactory两种对象进行配置
   @Bean
   public Mongo mongo2() throws Exception {
      return new MongoClient(new MongoClientURI(MONGO_DATA_SYNC_URI));
   }
   @Bean
   public MongoTemplate mongoTemplate2() throws Exception {
      return new MongoTemplate(mongo2(), "log2DbName");
   }
*/

   @Bean
   public MongoDbFactory dbFactory2() throws UnknownHostException {
      return new SimpleMongoDbFactory(new MongoClientURI(MONGO_URI2));
   }

   @Bean
   public MongoTemplate mongoTemplate2() throws Exception {
      return new MongoTemplate(dbFactory2());
   }
}

4、使用方法:使用@Resource注解根据名字注入两个不同的mongoTemplate
@Resource
private MongoTemplate mongoTemplate1;
@Resource
private MongoTemplate mongoTemplate2;

@Test
public void mongoTemplateTest(){
   PVUV pvuv = new PVUV();
   pvuv.setDate(LocalDate.now());
   pvuv.setPv(1000);
   pvuv.setUv(200);
   mongoTemplate1.save(pvuv, "pvUvCollection");
   mongoTemplate2.save(pvuv, "pvUvCollection");
}





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值