mongodb配置多数据源

最近在做系统迁移,就是我们后台管理系统有两个,一个是新的后台,一个是老的后台,有两个数据库(其中还有些表是同名的,也有些数据是耦合的)。我们现在想的是把老后台的功能慢慢的迁移到新后台来,因为两个库其中有些表同名,数据耦合的,所以我们就想着还是用两个数据源,先迁功能。所以我就需要在新后台配置多数据源。
具体代码如下,yml文件如下

spring:
  data:
    ## mongodb配置
    mongodb:
      primary:
        uri: mongodb://用户名:密码@ip:27017/库名
      secondary:
        uri: mongodb://用户名:密码@ip:27017/库名

mongodb的config文件如下

@Configuration
public class MultipleMongoConfig {

    @Value("${spring.data.mongodb.primary.uri}")
    private String primaryUri;
    @Value("${spring.data.mongodb.secondary.uri}")
    private String otherUri;


    @Primary
    @Bean(name = "mongoTemplate")
    public MongoTemplate primaryMongoTemplate() {
        SimpleMongoClientDatabaseFactory simpleMongoClientDbFactory = new SimpleMongoClientDatabaseFactory(primaryUri);
        return new MongoTemplate(simpleMongoClientDbFactory);
    }



    @Bean(name = "secondaryMongoTemplate")
    public MongoTemplate otherMongoTemplate() {
        SimpleMongoClientDatabaseFactory simpleMongoClientDbFactory =new SimpleMongoClientDatabaseFactory(otherUri);
        return new MongoTemplate(simpleMongoClientDbFactory);
    }
}

springboot的启动类,需要如下修改,这是因为Spring Boot 会自动注入 mongoTemplate ,与我们配置的多个数据源有冲突。为了防止默认注入,需要排除自动注入的类。在 Spring Boot 的启动类 Applocation.java 添加排除类注解

@SpringBootApplication(exclude = {
        MongoAutoConfiguration.class,
        MongoDataAutoConfiguration.class})

开始使用多数据源

	
    @Autowired
    @Qualifier("secondaryMongoTemplate")
    private MongoTemplate secondaryMongoTemplate;

	//主数据源使用
    @Autowired
    protected MongoTemplate mongoTemplate;

mo实体类,其中只截取部分字段,其中需要注意的是,因为我的集合名称是svOrderMo,但是我的类名是ResSvOrderMo ,所以在注解@Document上假如集合名称,要不然的话,在查询时,MongoTemplate.getCollectionName(entityClass)方法会从类名获取到集合名称为resSvOrderMo ,这样就导致查询不到数据(因为集合名根本不存在),加上注解映射就能解决这个问题。

@Document(collection = "svOrderMo")
@Data
@ApiModel(value = "服务单对象")
public class ResSvOrderMo {


    /**
     * 服务单ID
     */
    @Id
    @ApiModelProperty(value = "服务单ID", example = "202004231436463110")
    private String svOrderId;

    /**
     * 客户ID
     */
    @Indexed
    @ApiModelProperty(value = "客户ID", example = "5e5dffdf077d95002d973ebe")
    private String custId;
}
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值