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

資訊專欄INFORMATION COLUMN

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

時飛 / 1242人閱讀

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

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

English | 中文

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

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

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

快速使用

可以使用 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

在應用主類上添加 @EnableMongoCarefree 注解開啟自動配置,同時禁用 Spring Boot 默認的 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}")
配置選項

Carefree MongoDB 支持完整的 MongoDB Java Driver 客戶端選項,及多數據源配置,同時也提供了一些額外的配置項。

配置示例 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
多數據源

進行多數據源配置時,需要明確指定各數據源的 MongoTemplate Bean 名稱。如——

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

以上配置表示 3 個數據源,將創建 mongoTemplatemasterTemplatetestTemplate 三個 Bean。其中 mongoTemplate 為默認名稱,不需要顯示聲明,當不指定名稱時,將以此為名創建并注入。即以下兩種配置等價——

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

關于 MongoDB Java Driver 客戶端選項的詳細說明可以參考 MongoDB 客戶端連接選項 一文。

注:由于官方已對 socket-keep-alive 選項以及 MONGODB-CR 認證方式標注廢棄,因此 Carefree MongoDB 也不予支持。

以下將對一些由 Carefree MongoDB 特別處理的配置項進行說明——

carefree.mongodb.enable - 用于指示是否開啟 Carefree MongoDB 的自動配置。該選項設為 false 時將覆蓋 @EnableMongoCarefree 注解并關閉自動配置。默認為 true。

uri - MongoDB 的連接字符串,當配置了 uri 時,將忽略 addressesdatabaseusername 等連接相關的配置項,而直接使用 uri 建立連接。

auth - 服務端是否需要認證,默認為 false,如果服務端需要認證,請將該選項設為 true,否則即使配置了 usernamepassword 等選項也會被忽略。

authentication-mechanism - 服務端認證所采用的算法,可選值為 PLAINGSSAPIMONGODB-X509SCRAM-SHA-1SCRAM-SHA-256注:由于官方已對 MONGODB-CR 認證方式標注廢棄,因此 Carefree MongoDB 直接不予支持。

server-selector - com.mongodb.selector.ServerSelector 接口實現類的全名。

command-listeners - com.mongodb.event.CommandListener 接口實現類的全名,可以指定多個。

cluster-listeners - com.mongodb.event.ClusterListener 接口實現類的全名,可以指定多個。

connection-pool-listeners - com.mongodb.event.ConnectionPoolListener 接口實現類的全名,可以指定多個。

server-listeners - com.mongodb.event.ServerListener 接口實現類的全名,可以指定多個。

server-monitor-listeners - com.mongodb.event.ServerMonitorListener 接口實現類的全名,可以指定多個。

write-concern - 該選項接受的值形式如下——

w1w2w3 ... - 其中的數字可根據實際情況指定。

majorityjournal - 分別對應 WriteConcern.MAJORITYWriteConcern.JOURNALED 兩種模式。

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

read-concern - 可選值為 localmajoritylinearizablesnapshot

read-preference - 該選項接受的值形式如下——

primaryprimaryPreferredsecondarysecondaryPreferrednearest - 分別表示主節點、首選主節點、從節點、首選從節點以及最近節點 5 種模式。

mode-tagSet-staleness - 這種配置方式在 非 primary 模式下可以指定從哪些節點讀取(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 的字段存儲類名。該選項用于指定這個字段的名稱,如果設為 false 將不存儲這個字段;若為 true 則以默認的 _class 存儲;其它值則以指定的值為名存儲這個字段。

field-naming-strategy - org.springframework.data.mapping.model.FieldNamingStrategy 接口實現類的全名。

grid-fs-template-name - 指定該數據源 GridFsTemplate 的 Bean 名稱。若不指定則不創建該數據源的 GridFsTemplate。默認的(名為 mongoTemplate)的數據源即使不指定該選項也會創建名為 gridFsTemplate 的 Bean。

grid-fs-database - GridFS 數據庫名稱。默認使用 database 的值。

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


如果您喜歡我的文章,可以在以下平臺關注我——

個人主頁: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)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19387.html

相關文章

  • Spring Boot中的Mongodb多數據源擴展

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

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

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

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

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

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

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

    Ashin 評論0 收藏0

發表評論

0條評論

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