亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

spring-boot-starter-mongodb-pool

標簽:
SpringBoot

在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。

很多时候我们往往需要操作多个数据库(微服务架构下一个服务一个独立的库),最简单的方式就是在项目中为每个数据库配置下,比如:

@Bean 
@Primarypublic MongoDbFactory mongoDbFactory() throws Exception {    // 省略...
   return new SimpleMongoDbFactory(mongoClient, "db1");
}

@Bean
@Primarypublic MongoTemplate mongoTemplate() throws Exception {      //省略...
      MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);      return mongoTemplate;
}

@Bean 
@Qualifier("mongoDbFactory2")public MongoDbFactory mongoDbFactory2()hrows Exception {    // 省略...
   return new SimpleMongoDbFactory(mongoClient, "db2);
}

@Bean
@Qualifier("mongoTemplate2")
public MongoTemplate mongoTemplate2() hrows Exception {
    //省略...
    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);
    return mongoTemplate;
}

配置完成后注入使用的地方使用Qualifier注入即可使用对应的数据源,比如:

@Autowired@Qualifier("mongoTemplate2")private MongoTemplate seaweedMongoTemplate;

上面是直接在项目中配置多数据源的方式,接下来我们讲下一个问题,数据库连接池的问题,Mongodb的驱动中自带了连接池,但是Spring Boot Starter中却没有对连接池的配置,往往我们也需要通过代码的方式去配置,比如:

 @Bean
 public MongoClientOptions mongoClientOptions() {     return new MongoClientOptions.Builder()          //省略...
          .minConnectionsPerHost(...).build();
 }

虽然上面这些方式也都比较简单,但是在多个项目使用的时候都要去配置,重复代码比较严重,既然作为Starter按理来说是越简单越好,直接通过在属性文件中
配置就可以搞定,但是却不行,为此我封装了这个Pool Starter。

主要功能

  • 可以配置多个数据源

  • 支持连接池参数配置

  • 支持去掉_class的配置

不支持的功能

  • 多数据源配置后不支持Repository接口方式的使用

  • 不支持uri配置连接信息

配置方式

配置采用spring.data.mongodb.mongoTemplate名称.属性名=值

spring.data.mongodb.testMongoTemplate.host=localhost
spring.data.mongodb.testMongoTemplate.port=27017
spring.data.mongodb.testMongoTemplate.database=backup
spring.data.mongodb.testMongoTemplate.showClass=falsespring.data.mongodb.testMongoTemplate.gridFsTemplateName=gridFsTemplate

spring.data.mongodb.logsMongoTemplate.host=localhost
spring.data.mongodb.logsMongoTemplate.port=27017
spring.data.mongodb.logsMongoTemplate.database=logs
spring.data.mongodb.logsMongoTemplate.gridFsTemplateName=logsGridFsTemplate

testMongoTemplate和logsMongoTemplate就是每个数据源对应的MongoTemplate

同样的如果我们要操作GridFS的话也可以通过gridFsTemplateName属性来配置gridFsTemplate的名称

配置完之后就可以使用了,使用代码如下:

@Autowired@Qualifier("testMongoTemplate")private MongoTemplate testMongoTemplate;    
@Autowired@Qualifier("logsMongoTemplate")private MongoTemplate logsMongoTemplate;

完整的使用案列请参考:https://github.com/yinjihuan/spring-boot-starter-mongodb-pool/tree/master/spring-boot-starter-mongodb-pool-example

完整的属性配置请参考:

去掉_class

Spring Data Mongodb在保存数据的时候会自动增加一个_class字段用来关联这条数据的Document实体类,大数据量下会浪费存储空间,我们可以通过下面的配置禁用掉:

spring.data.mongodb.testMongoTemplate.showClass=false



作者:尹吉欢
链接:https://www.jianshu.com/p/7a62a450f192

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消