成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Carefree MongoDB] Spring Boot MongoDB 自動(dòng)化配置

時(shí)飛 / 1281人閱讀

摘要:然而,只提供了最簡(jiǎn)單的客戶端選項(xiàng),且不支持多數(shù)據(jù)源配置。由此而生,除了支持完整的客戶端選項(xiàng)及多數(shù)據(jù)源配置之外,還提供了一些其它的實(shí)用功能。配置示例多數(shù)據(jù)源進(jìn)行多數(shù)據(jù)源配置時(shí),需要明確指定各數(shù)據(jù)源的名稱。

最近在制作一個(gè) spring boot 小應(yīng)用時(shí)使用了 MongoDB,鑒于官方庫(kù)的簡(jiǎn)陋配置,決定自己造個(gè)輪子,源碼發(fā)布在 GitHub Carefree MongoDB,jar 已在中央倉(cāng)庫(kù)發(fā)布,可以直接引用。

English | 中文

Spring Data MongoDB 為面向 MongoDB 的開(kāi)發(fā)提供了一套基于 Spring 的編程模型,在 Spring Boot 中使用 spring-boot-starter-data-mongodb 可以很方便的引入 Spring Data MongoDB 以及 MongoDB Java Driver。

然而,Spring Data MongoDB 只提供了最簡(jiǎn)單的 MongoDB 客戶端選項(xiàng),且不支持多數(shù)據(jù)源配置。為了使用連接池、集群等 MongoDB 高級(jí)特性,及滿足多數(shù)據(jù)源的需求,我們不得不進(jìn)行一些額外的配置和編碼工作。

Carefree MongoDB 由此而生,除了支持完整的 MongoDB 客戶端選項(xiàng)及多數(shù)據(jù)源配置之外,還提供了一些其它的實(shí)用功能。使用后,Carefree MongoDB 將自動(dòng)創(chuàng)建并注入 MongoTemplate 以及 GridFsTemplate 實(shí)例。

快速使用

可以使用 Gradle 或 Maven 快速引入 Carefree MongoDB。將同時(shí)引入 spring-data-mongodb 和 mongo-java-driver,因此無(wú)需再額外定義二者的引入。

Gradle
compile group: "org.kweny.carefree", name: "carefree-mongodb-spring-boot-starter", version: "1.0.1"
Maven

  org.kweny.carefree
  carefree-mongodb-spring-boot-starter
  1.0.1
@EnableMongoCarefree

在應(yīng)用主類上添加 @EnableMongoCarefree 注解開(kāi)啟自動(dòng)配置,同時(shí)禁用 Spring Boot 默認(rèn)的 MongoDB 自動(dòng)配置——

@EnableMongoCarefree
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class Application {
   public static void main(String[] args) {
       SpringApplication.run(Application.class, args);
   }
}

Carefree MongoDB 將自動(dòng)加載配置文件 application.propertiesapplication.yml 中以 carefree.mongodb 為前綴的屬性。

屬性名的前綴可自定義,如——

@EnableMongoCarefree("mongodb.custom.prefix")

同時(shí)支持占位符,用以引用定義好的屬性值,如——

@EnableMongoCarefree("mongodb.${placeholder}.prefix")
@EnableMongoCarefree("${mongodb.placeholder.prefix}")
配置選項(xiàng)

Carefree MongoDB 支持完整的 MongoDB Java Driver 客戶端選項(xiàng),及多數(shù)據(jù)源配置,同時(shí)也提供了一些額外的配置項(xiàng)。

配置示例 application.yml
carefree:
  mongodb:
    enable: true
    options:
      primary: true
      uri: mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
      addresses:
      - 192.168.1.1:27017
      - 192.168.1.2:27017
      database: test_db
      auth: true
      username: test_user
      password: test_pwd
      authentication-mechanism: SCRAM-SHA-1
      authentication-source: admin
      description: some description
      application-name: test app
      connect-timeout: 10000
      socket-timeout: 0
      max-wait-time: 120000
      min-connections-per-host: 0
      max-connections-per-host: 100
      max-connection-idle-time: 0
      max-connection-life-time: 0
      threads-allowed-to-block-for-connection-multiplier: 5
      heartbeat-frequency: 10000
      min-heartbeat-frequency: 500
      heartbeat-connect-timeout: 20000
      heartbeat-socket-timeout: 20000
      retry-writes: false
      always-use-m-beans: false
      ssl-enabled: false
      ssl-invalid-host-name-allowed: false
      local-threshold: 15
      server-selection-timeout: 30000
      server-selector: com.xxx.CustomServerSelector
      required-replica-set-name: replica_name
      write-concern: w1
      read-concern: local
      read-preference: primary
      cursor-finalizer-enabled: true
      command-listeners:
      - com.xxx.CustomCommandListener
      cluster-listeners:
      - com.xxx.CustomClusterListener
      connection-pool-listeners:
      - com.xxx.CustomConnectionPoolListener
      server-listeners:
      - com.xxx.CustomServerListener
      server-monitor-listeners:
      - com.xxx.CustomServerMonitorListener
      type-key: _class
      grid-fs-template-name: gridFsTemplate
      grid-fs-database: test_db
      field-naming-strategy: com.xxx.CustomFieldNamingStrategy
      optioned-listeners:
      - com.xxx.CustomOptionedListener
application.properties
carefree.mongodb.enable=true
carefree.mongodb.options.uri=mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
carefree.mongodb.options.primary=true
carefree.mongodb.options.addresses[0]=192.168.1.1:27017
carefree.mongodb.options.addresses[1]=192.168.1.2:27017
carefree.mongodb.options.database=test_db
carefree.mongodb.options.auth=true
carefree.mongodb.options.username=test_user
carefree.mongodb.options.password=test_pwd
carefree.mongodb.options.authentication-mechanism=SCRAM-SHA-1
carefree.mongodb.options.authentication-source=admin
carefree.mongodb.options.description=some description
carefree.mongodb.options.application-name=test app
carefree.mongodb.options.connect-timeout=10000
carefree.mongodb.options.socket-timeout=0
carefree.mongodb.options.max-wait-time=120000
carefree.mongodb.options.min-connections-per-host=0
carefree.mongodb.options.max-connections-per-host=100
carefree.mongodb.options.max-connection-idle-time=0
carefree.mongodb.options.max-connection-life-time=0
carefree.mongodb.options.threads-allowed-to-block-for-connection-multiplier=5
carefree.mongodb.options.heartbeat-frequency=10000
carefree.mongodb.options.min-heartbeat-frequency=500
carefree.mongodb.options.heartbeat-connect-timeout=20000
carefree.mongodb.options.heartbeat-socket-timeout=20000
carefree.mongodb.options.retry-writes=false
carefree.mongodb.options.always-use-m-beans=false
carefree.mongodb.options.ssl-enabled=false
carefree.mongodb.options.ssl-invalid-host-name-allowed=false
carefree.mongodb.options.local-threshold=15
carefree.mongodb.options.server-selection-timeout=30000
carefree.mongodb.options.server-selector=com.xxx.CustomServerSelector
carefree.mongodb.options.required-replica-set-name=replica_name
carefree.mongodb.options.write-concern=w1
carefree.mongodb.options.read-concern=local
carefree.mongodb.options.read-preference=primary
carefree.mongodb.options.cursor-finalizer-enabled=true
carefree.mongodb.options.command-listeners[0]=com.xxx.CustomCommandListener
carefree.mongodb.options.cluster-listeners[0]=com.xxx.CustomClusterListener
carefree.mongodb.options.connection-pool-listeners[0]=com.xxx.CustomConnectionPoolListener
carefree.mongodb.options.server-listeners[0]=com.xxx.CustomServerListener
carefree.mongodb.options.server-monitor-listeners[0]=com.xxx.CustomServerMonitorListener
carefree.mongodb.options.type-key=_class
carefree.mongodb.options.grid-fs-template-name=gridFsTemplate
carefree.mongodb.options.grid-fs-database=test_db
carefree.mongodb.options.field-naming-strategy=com.xxx.CustomFieldNamingStrategy
carefree.mongodb.options.optioned-listeners[0]=com.xxx.CustomOptionedListener
多數(shù)據(jù)源

進(jìn)行多數(shù)據(jù)源配置時(shí),需要明確指定各數(shù)據(jù)源的 MongoTemplate Bean 名稱。如——

carefree:
  mongodb:
    enable: true
    options:
      primary: true
      uri: xxx
      
      masterTemplate:
        uri: xxx
        
      testTemplate:
        uri: yyy

以上配置表示 3 個(gè)數(shù)據(jù)源,將創(chuàng)建 mongoTemplate、masterTemplate、testTemplate 三個(gè) Bean。其中 mongoTemplate 為默認(rèn)名稱,不需要顯示聲明,當(dāng)不指定名稱時(shí),將以此為名創(chuàng)建并注入。即以下兩種配置等價(jià)——

carefree.mongodb.options.mongoTemplate.xxx=yyy
carefree.mongodb.options.xxx=yyy
配置說(shuō)明

關(guān)于 MongoDB Java Driver 客戶端選項(xiàng)的詳細(xì)說(shuō)明可以參考 MongoDB 客戶端連接選項(xiàng) 一文。

注:由于官方已對(duì) socket-keep-alive 選項(xiàng)以及 MONGODB-CR 認(rèn)證方式標(biāo)注廢棄,因此 Carefree MongoDB 也不予支持。

以下將對(duì)一些由 Carefree MongoDB 特別處理的配置項(xiàng)進(jìn)行說(shuō)明——

carefree.mongodb.enable - 用于指示是否開(kāi)啟 Carefree MongoDB 的自動(dòng)配置。該選項(xiàng)設(shè)為 false 時(shí)將覆蓋 @EnableMongoCarefree 注解并關(guān)閉自動(dòng)配置。默認(rèn)為 true。

uri - MongoDB 的連接字符串,當(dāng)配置了 uri 時(shí),將忽略 addressesdatabase、username 等連接相關(guān)的配置項(xiàng),而直接使用 uri 建立連接。

auth - 服務(wù)端是否需要認(rèn)證,默認(rèn)為 false,如果服務(wù)端需要認(rèn)證,請(qǐng)將該選項(xiàng)設(shè)為 true,否則即使配置了 usernamepassword 等選項(xiàng)也會(huì)被忽略。

authentication-mechanism - 服務(wù)端認(rèn)證所采用的算法,可選值為 PLAIN、GSSAPI、MONGODB-X509SCRAM-SHA-1、SCRAM-SHA-256注:由于官方已對(duì) MONGODB-CR 認(rèn)證方式標(biāo)注廢棄,因此 Carefree MongoDB 直接不予支持。

server-selector - com.mongodb.selector.ServerSelector 接口實(shí)現(xiàn)類的全名。

command-listeners - com.mongodb.event.CommandListener 接口實(shí)現(xiàn)類的全名,可以指定多個(gè)。

cluster-listeners - com.mongodb.event.ClusterListener 接口實(shí)現(xiàn)類的全名,可以指定多個(gè)。

connection-pool-listeners - com.mongodb.event.ConnectionPoolListener 接口實(shí)現(xiàn)類的全名,可以指定多個(gè)。

server-listeners - com.mongodb.event.ServerListener 接口實(shí)現(xiàn)類的全名,可以指定多個(gè)。

server-monitor-listeners - com.mongodb.event.ServerMonitorListener 接口實(shí)現(xiàn)類的全名,可以指定多個(gè)。

write-concern - 該選項(xiàng)接受的值形式如下——

w1w2、w3 ... - 其中的數(shù)字可根據(jù)實(shí)際情況指定。

majority、journal - 分別對(duì)應(yīng) WriteConcern.MAJORITYWriteConcern.JOURNALED 兩種模式。

w2-10000-true、w2-10000-false - 其中 w2 表示寫入模式;10000 表示寫入超時(shí)時(shí)間,即 wtimeout,單位為毫秒;true/false 表示是否需要 journalling。

read-concern - 可選值為 local、majoritylinearizable、snapshot

read-preference - 該選項(xiàng)接受的值形式如下——

primary、primaryPreferred、secondary、secondaryPreferrednearest - 分別表示主節(jié)點(diǎn)、首選主節(jié)點(diǎn)、從節(jié)點(diǎn)、首選從節(jié)點(diǎn)以及最近節(jié)點(diǎn) 5 種模式。

mode-tagSet-staleness - 這種配置方式在 非 primary 模式下可以指定從哪些節(jié)點(diǎn)讀?。╰agSet)以及容忍的最大延遲(staleness),其中 tagSet 可以指定多個(gè),staleness 單位為毫秒。如 secondary-[{a=0,b=1},{c=3,d=4},{e=5}]-10000、secondary-[{a=0,b=1}]、secondary-10000

type-key - Java 對(duì)象存儲(chǔ)為 MongoDB 的 Document 時(shí),會(huì)同時(shí)以一個(gè)名為 _class 的字段存儲(chǔ)類名。該選項(xiàng)用于指定這個(gè)字段的名稱,如果設(shè)為 false 將不存儲(chǔ)這個(gè)字段;若為 true 則以默認(rèn)的 _class 存儲(chǔ);其它值則以指定的值為名存儲(chǔ)這個(gè)字段。

field-naming-strategy - org.springframework.data.mapping.model.FieldNamingStrategy 接口實(shí)現(xiàn)類的全名。

grid-fs-template-name - 指定該數(shù)據(jù)源 GridFsTemplate 的 Bean 名稱。若不指定則不創(chuàng)建該數(shù)據(jù)源的 GridFsTemplate。默認(rèn)的(名為 mongoTemplate)的數(shù)據(jù)源即使不指定該選項(xiàng)也會(huì)創(chuàng)建名為 gridFsTemplate 的 Bean。

grid-fs-database - GridFS 數(shù)據(jù)庫(kù)名稱。默認(rèn)使用 database 的值。

optioned-listeners - org.kweny.carefree.mongodb.MongoCarefreeOptionedListener 接口實(shí)現(xiàn)類的全名,可以指定多個(gè)。這個(gè)監(jiān)聽(tīng)器于配置選項(xiàng)被加載解析完成后觸發(fā),接受 org.kweny.carefree.mongodb.MongoCarefreeStructurecom.mongodb.MongoClientOptions.Builder 兩個(gè)實(shí)例參數(shù),可以在連接、工廠、template 等對(duì)象真正創(chuàng)建之前進(jìn)行一些操作,如手動(dòng)設(shè)置一些沒(méi)有(無(wú)法)通過(guò)配置文件來(lái)指定的值等。


如果您喜歡我的文章,可以在以下平臺(tái)關(guān)注我——

個(gè)人主頁(yè):http://kweny.io

GitHub:https://github.com/kweny

知乎:https://zhihu.com/people/kweny

思否:https://segmentfault.com/u/kweny

微博:https://weibo.com/kweny

公眾號(hào):K棧IO(KwenyIO)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19387.html

相關(guān)文章

  • Spring Boot中的Mongodb多數(shù)據(jù)源擴(kuò)展

    摘要:在日常工作中,我們通過(guò)來(lái)操作數(shù)據(jù)庫(kù),在中只需要引入即可。當(dāng)在一個(gè)項(xiàng)目中需要連接多個(gè)數(shù)據(jù)庫(kù)的時(shí)候,的自動(dòng)配置無(wú)法滿足需求,所以我這邊封裝了一個(gè)多數(shù)據(jù)源的。 在日常工作中,我們通過(guò)Spring Data Mongodb來(lái)操作Mongodb數(shù)據(jù)庫(kù),在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。 然后配置連接信息如下: spring....

    suemi 評(píng)論0 收藏0
  • Spring Boot 中使用 MongoDB 增刪改查

    摘要:聲明構(gòu)造函數(shù),作用是把從數(shù)據(jù)庫(kù)取出的數(shù)據(jù)實(shí)例化為對(duì)象。該構(gòu)造函數(shù)傳入的值為從中取出的數(shù)據(jù)省略接口提供增刪改查接口實(shí)現(xiàn)提供增刪改查接口實(shí)現(xiàn)提供了一個(gè)類似于的設(shè)計(jì)的類。 本文快速入門,MongoDB 結(jié)合SpringBoot starter-data-mongodb 進(jìn)行增刪改查 1、什么是MongoDB ? MongoDB 是由C++語(yǔ)言編寫的,是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng)。...

    ranwu 評(píng)論0 收藏0
  • 兩年了,我寫了這些干貨!

    摘要:開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問(wèn)題前后端分離二使用完美處理權(quán)限問(wèn)題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0
  • 70 個(gè) Spring 最常見(jiàn)面試題,Java 晉升必會(huì)

    摘要:容器自動(dòng)完成裝載,默認(rèn)的方式是這部分重點(diǎn)在常用模塊的使用以及的底層實(shí)現(xiàn)原理。 對(duì)于那些想面試高級(jí) Java 崗位的同學(xué)來(lái)說(shuō),除了算法屬于比較「天方夜譚」的題目外,剩下針對(duì)實(shí)際工作的題目就屬于真正的本事了,熱門技術(shù)的細(xì)節(jié)和難點(diǎn)成為了主要考察的內(nèi)容。 這里說(shuō)「天方夜譚」并不是說(shuō)算法沒(méi)用,不切實(shí)際,而是想說(shuō)算法平時(shí)其實(shí)很少用到,甚至面試官都對(duì)自己出的算法題一知半解。 這里總結(jié)打磨了 70 道...

    Ashin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<