国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Carefree MongoDB] Spring Boot MongoDB 自動化配置

時飛 / 1273人閱讀

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

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

English | 中文

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

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

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

快速使用

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

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 注解開啟自動配置,同時禁用 Spring Boot 默認(rèn)的 MongoDB 自動配置——

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

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

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

@EnableMongoCarefree("mongodb.custom.prefix")

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

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

Carefree MongoDB 支持完整的 MongoDB Java Driver 客戶端選項(xiàng),及多數(shù)據(jù)源配置,同時也提供了一些額外的配置項(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ù)據(jù)源的 MongoTemplate Bean 名稱。如——

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

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

carefree.mongodb.options.mongoTemplate.xxx=yyy
carefree.mongodb.options.xxx=yyy
配置說明

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

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

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

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

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

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

authentication-mechanism - 服務(wù)端認(rèn)證所采用的算法,可選值為 PLAINGSSAPIMONGODB-X509SCRAM-SHA-1SCRAM-SHA-256注:由于官方已對 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)類的全名,可以指定多個。

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

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

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

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

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

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

majorityjournal - 分別對應(yīng) WriteConcern.MAJORITYWriteConcern.JOURNALED 兩種模式。

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

read-concern - 可選值為 localmajoritylinearizablesnapshot

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

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

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

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

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)也會創(chuàng)建名為 gridFsTemplate 的 Bean。

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

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


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

個人主頁:http://kweny.io

GitHub:https://github.com/kweny

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

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

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

公眾號:K棧IO(KwenyIO)

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19387.html

相關(guān)文章

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

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

    suemi 評論0 收藏0
  • Spring Boot 中使用 MongoDB 增刪改查

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

    ranwu 評論0 收藏0
  • 兩年了,我寫了這些干貨!

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

    huayeluoliuhen 評論0 收藏0
  • 70 個 Spring 最常見面試題,Java 晉升必會

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

    Ashin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<