<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 的示例:
<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 數據庫:
<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 中聲明以下設置:
<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,供你注入模板,如下所示:
<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,那麼它的工作方式是相同的,如下面示例所示:
<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 實例的配置和日誌路由。
閱讀更多 IT薺薺菜 的文章