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 实例的配置和日志路由。


分享到:


相關文章: