02.25 SpringBoot中文參考指南(2.1.6)32、使用 NoSQL 技術

SpringBoot中文參考指南(2.1.6)32、使用 NoSQL 技術

<code>英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-nosql.html/<code>
<code>GitHub:https://github.com/jijicai/Spring/tree/master/spring-boot/<code>

32、使用 NoSQL 技術

Spring Data 提供了額外的項目,幫助你訪問各種 NoSQL 技術,包括:MongoDB、Neo4j、Elasticsearch、Solr、Redis、Gemfire、Cassandra、Couchbase 和 LDAP。Spring Boot 為它們提供了自動配置:Redis、MongoDB、Neo4j、Elasticsearch、Solr、Cassandra、Couchbase 和 LDAP。你可以使用其他項目,但必須自己配置它們。請參閱 projects.spring.io/spring-data 中的相應參考文檔。

32.1、Redis

Redis 是一個緩存、消息代理和功能豐富的鍵值存儲。Spring Boot 為 Lettuce 和 Jedis 客戶端庫以及Spring Data Redis 提供的抽象庫提供了基本的自動配置。

有一個 spring-boot-starter-data-redis “Starter”,可以方便地收集依賴項。默認情況下,它使用 Lettuce。這個啟動器同時處理傳統的和反應式應用程序。

提示:我們還提供了一個 spring-boot-starter-data-redis-reactive “Starter”,以便與具有反應式支持的其他存儲保持一致。

32.1.1、鏈接到 Redis

你可以注入一個自動配置的 RedisConnectionFactory、StringRedisTemplate 或 vanilla(香草味的)RedisTemplate 實例,就像注入任何其他 Spring Bean 一樣。默認情況下,該實例嘗試連接到 localhost:6379 上的 Redis 服務器。下面的清單顯示了這樣一個 bean 的示例:

SpringBoot中文參考指南(2.1.6)32、使用 NoSQL 技術

<code>@Componentpublic class MyBean {    private StringRedisTemplate template;    @Autowired    public MyBean(StringRedisTemplate template) {        this.template = template;    }    // ...}/<code>

提示:你還可以註冊任意數量的 bean,實現 LettuceClientConfigurationBuilderCustomizer 以進行更高級的自定義。如果使用 Jedis,也可以使用 JedisClientConfigurationBuilderCustomizer。

如果你添加任何自動配置類型的自己的 @Bean,則它將取代默認的 @Bean(除了 RedisTemplate,當排除基於 bean 名稱 redisTemplate 而不是其類型時)。默認情況下,如果 commons-pool2 位於類路徑上,則會得到一個池化的連接工廠。

32.2、MongoDB

MongoDB 是一個開源的 NoSQL 文檔數據庫,它使用類似 JSON 的模式,而不是傳統的基於表的關係數據。Spring Boot 為使用 MongoDB 提供了一些便利,包括 spring-boot-starter-data-mongodb 和 spring-boot-starter-data-mongodb-reactive “Starters”。

32.2.1、連接到 MongoDB 數據庫

要訪問 Mongo 數據庫,可以插入一個自動配置的 org.springframework.data.mongodb.MongoDbFactory。默認情況下,實例嘗試連接到 mongodb://localhost/test 上的 MongoDB 服務器。下面的示例展示瞭如何連接到 MongoDB 數據庫:

SpringBoot中文參考指南(2.1.6)32、使用 NoSQL 技術

<code>import org.springframework.data.mongodb.MongoDbFactory;import com.mongodb.DB;@Componentpublic class MyBean {    private final MongoDbFactory mongo;    @Autowired    public MyBean(MongoDbFactory mongo) {        this.mongo = mongo;    }    // ...    public void example() {        DB db = mongo.getDb();        // ...    }}/<code>

你可以設置 spring.data.mongodb.uri 屬性來更改 URL 並配置其他設置,例如副本集,如下面示例所示:

<code>spring.data.mongodb.uri=mongodb://user:[email protected]:12345,mongo2.example.com:23456/test/<code>

或者,只要使用 Mongo 2.x,就可以指定主機/端口。例如,你可以在 application.properties 中聲明以下設置:

SpringBoot中文參考指南(2.1.6)32、使用 NoSQL 技術

<code>spring.data.mongodb.host=mongoserverspring.data.mongodb.port=27017/<code>

如果你已經定義了自己的 MongoClient,它將用於自動配置合適的 MongoDbFactory。同時支持com.mongodb.MongoClient 和 com.mongodb.client.MongoClient。

註釋:如果使用 Mongo3.0 Java 驅動程序,則不支持 spring.data.mongodb.host 和 spring.data.mongodb.port。在這種情況下,應該使用 spring.data.mongodb.uri 來提供所有配置。

提示:如果未指定 spring.data.mongodb.port,則使用默認值 27017。你可以從前面顯示的示例中刪除這一行。

提示:如果不使用 Spring Data Mongo,可以注入 com.mongodb.MongoClient bean,而不是使用 MongoDbFactory。如果想完全控制建立 MongoDB 連接,還可以聲明自己的 MongoDbFactory 或 MongoClientBean。

註釋:如果你使用的是反應式驅動程序,那麼 SSL 需要 Netty。如果 Netty 可用且要使用的工廠尚未自定義,則自動配置將自動配置此工廠。

32.2.2、MongoTemplate

Spring Data MongoDB 提供了一個 MongoTemplate 類,其設計與 Spring 的 JdbcTemplate 非常相似。與 JdbcTemplate 一樣,Spring Boot 會自動配置一個 bean,供你注入模板,如下所示:

SpringBoot中文參考指南(2.1.6)32、使用 NoSQL 技術

<code>import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.stereotype.Component;@Componentpublic class MyBean {    private final MongoTemplate mongoTemplate;    @Autowired    public MyBean(MongoTemplate mongoTemplate) {        this.mongoTemplate = mongoTemplate;    }    // ...}/<code>

有關完整的詳細信息,請參閱 MongoOperations Javadoc。(https://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoOperations.html )

32.2.3、Spring Data MongDB 存儲庫

Spring Data 包括對 MongoDB 的存儲庫支持。與前面討論的 JPA 存儲庫一樣,基本原則是根據方法名自動構造查詢。

實際上,Spring Data JPA 和 Spring Data MongoDB 共享相同的公共基礎設施。你可以從前面的 JPA 示例開始,假設 City 現在是 Mongo 數據類而不是 JPA @Entity,那麼它的工作方式是相同的,如下面示例所示:

SpringBoot中文參考指南(2.1.6)32、使用 NoSQL 技術

<code>package com.example.myapp.domain;import org.springframework.data.domain.*;import org.springframework.data.repository.*;public interface CityRepository extends Repository<city> {    Page<city> findAll(Pageable pageable);    City findByNameAndStateAllIgnoringCase(String name, String state);}/<city>/<city>/<code>

提示:你可以使用 @EntityScan 註解自定義文檔掃描位置。

提示:有關 Spring Data MongoDB 的完整詳細信息,包括其豐富的對象映射技術,請參閱其參考文檔。(https://projects.spring.io/spring-data-mongodb/ )

32.2.4、嵌入式 Mongo

Spring Boot 為嵌入式 Mongo 提供了自動配置。要在 Spring Boot 應用程序中使用它,請添加對de.flapdoodle.embed:de.flapdoodle.embed.mongo 的依賴項。

Mongo 監聽的端口可以通過設置 spring.data.mongodb.port 屬性進行配置。要使用隨機分配的空閒端口,請使用值 0。MongoAutoConfiguration 創建的 MongoClient 會自動配置為使用隨機分配的端口。

註釋:如果不配置自定義端口,默認情況下,嵌入式支持使用隨機端口(而不是27017)。

如果類路徑上有 SLF4J,Mongo 生成的輸出將自動路由到名為 org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo 的記錄器。

你可以聲明自己的 IMongodConfig 和 IRuntimeConfig bean 來控制 Mongo 實例的配置和日誌路由。


分享到:


相關文章: