Working with NoSQL Technologies
Spring Data 提供了其他项目,可帮助你访问各种 NoSQL 技术,包括:
-
{url-spring-data-cassandra-site}[Cassandra]
-
{url-spring-data-couchbase-site}[Couchbase]
-
{url-spring-data-elasticsearch-site}[Elasticsearch]
-
{url-spring-data-gemfire-site}[GemFire] or {url-spring-data-geode-site}[Geode]
-
{url-spring-data-ldap-site}[LDAP]
-
{url-spring-data-mongodb-site}[MongoDB]
-
{url-spring-data-neo4j-site}[Neo4J]
-
{url-spring-data-redis-site}[Redis]
在这之中,Spring Boot 为 Cassandra、Couchbase、Elasticsearch、LDAP、MongoDB、Neo4J 和 Redis 提供自动配置。此外,{url-spring-boot-for-apache-geode-site}[Spring Boot for Apache Geode] 还提供 {url-spring-boot-for-apache-geode-docs}#geode-repositories[Apache Geode 的自动配置]。你可以使用其他项目,但你必须自己配置它们。请参阅 {url-spring-data-site} 上的相应参考文档。 Spring Boot 还为 InfluxDB 客户端提供自动配置,但已弃用以支持 the new InfluxDB Java client,它提供了自己的 Spring Boot 集成。
Redis
Redis是一个缓存、消息代理和功能丰富的键值存储。Spring Boot 为 Lettuce和 Jedis客户端库以及 Spring Data Redis提供的之上抽象提供基本的自动配置。
有一个 spring-boot-starter-data-redis
"`Starter`"用于以一种便捷的方式收集依赖项。默认情况下,它使用 Lettuce。该 starter 处理传统应用程序和反应式应用程序。
我们还为 "`Starter`"提供一个 |
Connecting to Redis
你可以注入一个自动配置的 RedisConnectionFactory
、StringRedisTemplate
、或普通的 `RedisTemplate`实例,就像注入任何其他 Spring Bean 一样。以下清单展示了此类 bean 的示例:
默认情况下,该实例会尝试连接到 `localhost:6379`的 Redis 服务器。你可以使用 `spring.data.redis.*`属性指定自定义连接详细信息,如下例所示:
spring: data: redis: host: "localhost" port: 6379 database: 0 username: "user" password: "secret"
你还可以注册任意数目的 bean 来实现 |
如果你添加的是任何自动配置类型的 @Bean
,则它会替换默认值(除非是 RedisTemplate
,此时排除的依据是 bean 名称 redisTemplate
,而不是它的类型)。
默认情况下,如果 `commons-pool2`在类路径中,则会自动配置一个连接池工厂。
可以将自动配置的 `RedisConnectionFactory`配置为使用 SSL 与服务器通信,方法是设置属性,如本例所示:
spring: data: redis: ssl: enabled: true
可以在一个 SSL bundle中配置自定义的 SSL 信任资料,并将其应用到 RedisConnectionFactory
,如本例所示:
spring: data: redis: ssl: bundle: "example"
MongoDB
MongoDB是一个开源 NoSQL 文档数据库,它使用类似于 JSON 的模式,而不是传统的基于表的关联数据。Spring Boot 为使用 MongoDB 提供了多种便利,包括 spring-boot-starter-data-mongodb`和 `spring-boot-starter-data-mongodb-reactive
“Starters”。
Connecting to a MongoDB Database
要访问 MongoDB 数据库,你可以注入一个自动配置的 org.springframework.data.mongodb.MongoDatabaseFactory
。默认情况下,该实例会尝试连接到 `mongodb://localhost/test`的 MongoDB 服务器。以下示例展示了如何连接到 MongoDB 数据库:
如果您定义了自己的 MongoClient
,它将用于自动配置一个合适的 MongoDatabaseFactory
。
自动配置的 MongoClient`使用 `MongoClientSettings`bean 创建。如果您定义了自己的 `MongoClientSettings
,它将按原样使用,并且会忽略 spring.data.mongodb`属性。否则,将自动配置 `MongoClientSettings
,并将 spring.data.mongodb`属性应用于它。在这两种情况下,您可以声明一个或多个 `MongoClientSettingsBuilderCustomizer`bean 来微调 `MongoClientSettings`配置。每个 bean 都将按顺序使用 `MongoClientSettings.Builder
,用于构建 MongoClientSettings
。
您可以设置 configprop:spring.data.mongodb.uri[] 属性以更改 URL 并配置其他设置,例如 replica set,如下例所示:
spring: data: mongodb: uri: "mongodb://user:secret@mongoserver1.example.com:27017,mongoserver2.example.com:23456/test"
或者,您可以使用离散属性指定连接详细信息。例如,您可以在 `application.properties`中声明以下设置:
spring: data: mongodb: host: "mongoserver1.example.com" port: 27017 additional-hosts: - "mongoserver2.example.com:23456" database: "test" username: "user" password: "secret"
可以通过设置如本例所示的属性来配置自动配置的 `MongoClient`在与服务器通信时使用 SSL:
spring: data: mongodb: uri: "mongodb://user:secret@mongoserver1.example.com:27017,mongoserver2.example.com:23456/test" ssl: enabled: true
可以在 SSL bundle中配置自定义 SSL 信任材料,并将其应用于 MongoClient
,如下例所示:
spring: data: mongodb: uri: "mongodb://user:secret@mongoserver1.example.com:27017,mongoserver2.example.com:23456/test" ssl: bundle: "example"
如果未指定 |
如果您不使用 Spring Data MongoDB,则可以注入 |
如果您使用的是反应式驱动程序,SSL 需要 Netty。如果 Netty 可用且尚未自定义要使用的工厂,则自动配置会自动配置此工厂。 |
MongoTemplate
{url-spring-data-mongodb-site}[Spring Data MongoDB] 提供了一个在设计上与 Spring 的 JdbcTemplate`非常相似的 {url-spring-data-mongodb-javadoc}/org/springframework/data/mongodb/core/MongoTemplate.html[`MongoTemplate
] 类。与 `JdbcTemplate`一样,Spring Boot 会自动为您配置一个 bean,以便注入模板,如下所示:
有关完整详细信息,请参阅 {url-spring-data-mongodb-javadoc}/org/springframework/data/mongodb/core/MongoOperations.html[`MongoOperations`Javadoc]。
Spring Data MongoDB Repositories
Spring Data 包括对 MongoDB 的存储库支持。与前面讨论的 JPA 存储库一样,基本原则是根据方法名称自动构造查询。
实际上,Spring Data JPA 和 Spring Data MongoDB 都共享相同的通用基础设施。您可以获取前面的 JPA 示例,假设 City`现在是一个 MongoDB 数据类,而不是 JPA `@Entity
,它以相同的方式工作,如下例所示:
存储库和文档是通过扫描找到的。默认情况下,扫描 auto-configuration packages。您可以通过分别使用 `@EnableMongoRepositories`和 `@EntityScan`来自定义要查找存储库和文档的位置。
有关 Spring Data MongoDB 的完整详细信息,包括其丰富的对象映射技术,请参阅其 {url-spring-data-mongodb-docs}[参考文档]。 |
Neo4j
Neo4j是一个开放源代码 NoSQL 图数据库,它使用由一级关系连接的节点的丰富数据模型,它比传统 RDBMS 方法更适合连接的大数据。Spring Boot 提供了多种便利措施来处理 Neo4j,包括 spring-boot-starter-data-neo4j
“Starter”。
Connecting to a Neo4j Database
要访问 Neo4j 服务器,您可以注入一个自动配置的 org.neo4j.driver.Driver
。默认情况下,该实例尝试使用 Bolt 协议连接到 localhost:7687`的 Neo4j 服务器。以下示例显示了如何注入 Neo4j `Driver
,它能让您访问 Session
,以及其他内容:
可以使用 @1
属性配置驱动程序的各方面。以下示例演示如何配置要使用的 URI 和凭证:
spring: neo4j: uri: "bolt://my-server:7687" authentication: username: "neo4j" password: "secret"
自动配置的 @2
是使用 @3
创建的。要微调其配置,请声明一个或多个 @4
Bean。每个 bean 都会按顺序使用 @5
对 @6
进行构建。
Spring Data Neo4j Repositories
Spring Data 包括 Neo4j 存储库支持。有关 Spring Data Neo4j 的完整详细信息,请参阅 {url-spring-data-neo4j-docs}[参考文档]。
Spring Data Neo4j 与 Spring Data JPA 共享通用基础架构,与许多其他 Spring Data 模块一样。你可以获取前面的 JPA 示例,并将 @7
定义为 Spring Data Neo4j @8
而不是 JPA @9
,存储库抽象工作方式相同,如下面的示例中所示:
@11
@10
启用了存储库支持以及事务管理。Spring Boot 使用 @12
或 @13
Bean 支持经典和响应式 Neo4j 存储库。当类路径上提供 Project Reactor 时,还会自动配置响应式样式。
通过扫描找到存储库和实体。默认情况下,会扫描 @16
。你可以使用 @14
和 @15
分别自定义查找存储库和实体的位置。
在使用响应式样式的应用程序中,不会自动配置 |
Elasticsearch
@19
是一个开源、分布式、RESTful 搜索和分析引擎。Spring Boot 为 Elasticsearch 客户端提供了基本的自动配置。
Spring Boot 支持多个客户端:
-
官方低级 REST 客户端
-
官方 Java API 客户端
-
@20
由 Spring Data Elasticsearch 提供
Spring Boot 提供了一个专门的 @21
, @22
。
Connecting to Elasticsearch Using REST clients
Elasticsearch 提供了两个不同的 REST 客户端,你可以使用它们来查询集群:来自 @23
模块的 @28
和来自 @24
模块的 @29
。此外,Spring Boot 提供了对来自 @25
模块的响应式客户端的支持。默认情况下,客户端将针对 @26
。你可以使用 @27
属性进一步微调客户端的配置,如下面的示例所示:
spring: elasticsearch: uris: "https://search.example.com:9200" socket-timeout: "10s" username: "user" password: "secret"
Connecting to Elasticsearch Using RestClient
如果你在类路径上有 @30
,Spring Boot 将自动配置并注册一个 @31
Bean。除了前面描述的属性之外,为了微调 @32
,你可以注册任意数量实现 @33
的 Bean,以进行更高级别的自定义。要完全控制客户端的配置,请定义一个 @34
Bean。
此外,如果类路径上存在 @35
,则会自动配置 @36
,以从正在运行的 Elasticsearch 集群中自动发现节点并将它们设置在 @37
Bean 上。你可以进一步微调 @38
的配置,如下面的示例所示:
spring: elasticsearch: restclient: sniffer: interval: "10m" delay-after-failure: "30s"
Connecting to Elasticsearch Using ElasticsearchClient
如果你在类路径上有 @39
,Spring Boot 将自动配置并注册 @40
Bean。
{ElasticsearchClient
} 使用依赖于前面所述的 {RestClient
} 的传输。因此,先前述及的属性可用来配置 {ElasticsearchClient
}。另外,您可以定义一个 {RestClientOptions
} bean 以进一步控制传输的行为。
Connecting to Elasticsearch using ReactiveElasticsearchClient
{@ url-spring-data-elasticsearch-site}[Spring Data Elasticsearch]} 提供 {ReactiveElasticsearchClient
} 用以以响应式方式查询 Elasticsearch 实例。如果您在类路径中有 Spring Data Elasticsearch 和 Reactor,Spring Boot 将自动配置并注册一个 {ReactiveElasticsearchClient
}。
{ReactiveElasticsearchclient
} 使用依赖于前面所述的 {RestClient
} 的传输。因此,先前述及的属性可用来配置 {ReactiveElasticsearchClient
}。另外,您可以定义一个 {RestClientOptions
} bean 以进一步控制传输的行为。
Connecting to Elasticsearch by Using Spring Data
要连接至 Elasticsearch,必须定义一个 {ElasticsearchClient
} bean,由 Spring Boot 自动配置或由应用程序手动提供(请参见前面的部分)。有了此配置,就可以注入一个 {ElasticsearchTemplate
} 就像注入任何其他 Spring bean 一样,如下例所示:
在存在 {spring-data-elasticsearch
} 和 Reactor 的情况下,Spring Boot 还可以将 {ReactiveElasticsearchClient} 和 {ReactiveElasticsearchTemplate
} 自动配置为 bean。它们是其他 REST 客户端的响应式等效项。
Spring Data Elasticsearch Repositories
Spring Data 包括对 Elasticsearch 的存储库支持。与先前讨论的 JPA 存储库一样,基本原理是基于方法名称自动为您构建查询。
事实上,Spring Data JPA 和 Spring Data Elasticsearch 都共享相同的公共基础架构。您可以使用前文提到的 JPA 示例,假设 {City
} 现在是一个 Elasticsearch {@Document
} 类,而不是一个 JPA {@Entity
},它的工作方式是一样的。
将通过扫描查找存储库和文档。默认情况下,将扫描 {auto-configuration packages}。您可以使用 {@EnableElasticsearchRepositories
} 和 {@EntityScan
} 分别来自定义查找存储库和文档的位置。
有关 Spring Data Elasticsearch 的详细信息,请参见 {@ url-spring-data-elasticsearch-docs}[参考文档]。 |
Spring Boot 使用 {ElasticsearchRestTemplate
} 或 {ReactiveElasticsearchTemplate
} bean 支持经典和响应式 Elasticsearch 存储库。如果存在需要的依赖项,Spring Boot 很可能自动配置这些 bean。
如果您希望使用自己的模板作为 Elasticsearch 存储库的后端,您可以添加自己的 {ElasticsearchRestTemplate
} 或 {ElasticsearchOperations
} {@Bean
},只要命名为 {"elasticsearchTemplate"
} 即可。与 {ReactiveElasticsearchTemplate
} 和 {ReactiveElasticsearchOperations
} 相同,bean 名称是 {"reactiveElasticsearchTemplate"
}。
您可以选择使用以下属性禁用存储库支持:
spring: data: elasticsearch: repositories: enabled: false
Cassandra
{ Cassandra} 是一个开源的分布式数据库管理系统,旨在跨多台商用服务器处理海量数据。Spring Boot 为 Cassandra 和它之上的抽象(由 {@ url-spring-data-cassandra-site}[Spring Data Cassandra]} 提供)提供了自动配置。有一个 {spring-boot-starter-data-cassandra
} {“Starter”} 用于以便捷的方式收集依赖项。
Connecting to Cassandra
您可以注入自动配置的 {CassandraTemplate
} 或 Cassandra {CqlSession
} 实例,就像注入任何其他 Spring Bean 一样。{spring.cassandra.*
} 属性可用于自定连接。通常,您会提供 {keyspace-name
} 和 {contact-points
},以及本地数据中心名称,如下例所示:
spring: cassandra: keyspace-name: "mykeyspace" contact-points: "cassandrahost1:9042,cassandrahost2:9042" local-datacenter: "datacenter1"
如果所有接触点的端口相同,您可以使用一个快捷方式,仅指定主机名,如下例所示:
spring: cassandra: keyspace-name: "mykeyspace" contact-points: "cassandrahost1,cassandrahost2" local-datacenter: "datacenter1"
这两个示例相同,因为端口默认为 { |
可以将自动配置的 {CqlSession
} 配置为使用 SSL 与服务器通信,方法是按此示例所示设置属性:
spring: cassandra: keyspace-name: "mykeyspace" contact-points: "cassandrahost1,cassandrahost2" local-datacenter: "datacenter1" ssl: enabled: true
可以在 {SSL bundle} 中配置自定义 SSL 信任材料,并将其应用于 {CqlSession
},如下例所示:
spring: cassandra: keyspace-name: "mykeyspace" contact-points: "cassandrahost1,cassandrahost2" local-datacenter: "datacenter1" ssl: bundle: "example"
Cassandra 驱动程序有它自己的配置基础架构,该基础架构在类路径的根目录加载一个 { |
如果您使用 |
以下代码清单展示了如何注入一个 Cassandra Bean:
如果您添加自己类型为 CassandraTemplate
的 @Bean
,它将替换默认值。
Spring Data Cassandra Repositories
Spring Data 包含用于 Cassandra 的基本存储库支持。目前,这比前面讨论的 JPA 存储库更为受限,需要 @Query
带注释的查找器方法。
存储库和实体会通过扫描找到。默认情况下,会扫描 auto-configuration packages。您可以通过分别使用 @EnableCassandraRepositories
和 @EntityScan
,自定义查找存储库和实体的位置。
有关 Spring Data Cassandra 的完整详细信息,请参见 reference documentation。 |
Couchbase
Couchbase 是一款开源、分布式、多模型非 SQL 面向文档的数据库,它针对交互式应用程序进行了优化。Spring Boot 为 Couchbase 和基于其之上由 Spring Data Couchbase 提供的抽象提供自动配置。有 spring-boot-starter-data-couchbase
和 spring-boot-starter-data-couchbase-reactive
“Starters”,用于以一种方便的方式收集依赖关系。
Connecting to Couchbase
您可以通过添加 Couchbase SDK 以及一些配置来获取一个 Cluster
。可以使用 spring.couchbase.*
属性来自定义连接。通常,您需要提供 connection string、用户名和密码,如下面的示例所示:
spring: couchbase: connection-string: "couchbase://192.168.1.123" username: "user" password: "secret"
还可以自定义某些 ClusterEnvironment
设置。例如,以下配置将打开一个新的 Bucket
的超时,并利用对一个已配置 SSL bundle 的引用启用 SSL 支持:
spring: couchbase: env: timeouts: connect: "3s" ssl: bundle: "example"
查看 |
Spring Data Couchbase Repositories
Spring Data 包含 Couchbase 的存储库支持。
存储库和文档会通过扫描找到。默认情况下,会扫描 auto-configuration packages。您可以通过分别使用 @EnableCouchbaseRepositories
和 @EntityScan
,自定义查找存储库和文档的位置。
有关 Spring Data Couchbase 的完整详细信息,请参见 {url-spring-data-couchbase-docs}[参考文档]。
您可以注入自动配置的 CouchbaseTemplate
实例,这与您使用任何其他 Spring Bean 的方式相同,前提是提供了 CouchbaseClientFactory
Bean。当一个 Cluster
可用时会发生这种情况,如上所述,并且已经指定了一个 Bucket 名称:
spring: data: couchbase: bucket-name: "my-bucket"
以下示例展示了如何注入一个 CouchbaseTemplate
Bean:
您可以在自己的配置中定义一些 Bean,以覆盖自动配置所提供的 Bean:
-
具有名称
couchbaseMappingContext
的CouchbaseMappingContext
@Bean
。 -
具有名称
couchbaseCustomConversions
的CustomConversions
@Bean
。 -
具有名称
couchbaseTemplate
的CouchbaseTemplate
@Bean
。
为了避免在自己的配置中硬编码这些名称,你可以重用 Spring Data Couchbase 提供的 BeanNames
。例如,你可以自定义要使用的转换器,如下所示:
LDAP
LDAP(轻量级目录访问协议)是一个开放的、供应商中立的、行业标准应用程序协议,用于通过 IP 网络访问和维护分布式目录信息服务。Spring Boot 为任何兼容的 LDAP 服务器提供自动配置,并支持 UnboundID 中的嵌入式内存中 LDAP 服务器。
LDAP 抽象由 Spring Data LDAP 提供。有一个 spring-boot-starter-data-ldap
“Starter” 可用于便捷地收集依赖项。
Connecting to an LDAP Server
若要连接到 LDAP 服务器,请确保声明对 spring-boot-starter-data-ldap
“Starter” 或 spring-ldap-core
的依赖,然后在 application.properties 中声明服务器的 URL,如下例所示:
spring: ldap: urls: "ldap://myserver:1235" username: "admin" password: "secret"
如果需要自定义连接设置,则可以使用 spring.ldap.base
和 spring.ldap.base-environment
属性。
基于这些设置,会自动配置一个 LdapContextSource
。如果 DirContextAuthenticationStrategy
bean 可用,则将其与自动配置的 LdapContextSource
关联。如果你需要自定义它(例如为了使用 PooledContextSource
),你仍然可以注入自动配置的 LdapContextSource
。确保将自定义的 ContextSource
标记为 @Primary
,这样自动配置的 LdapTemplate
就会使用它。
Spring Data LDAP Repositories
Spring Data 包含对 LDAP 的存储库支持。
通过扫描找到存储库和文档。默认情况下,扫描 auto-configuration packages。你可以分别使用 @EnableLdapRepositories
和 @EntityScan
来自定义要查找存储库和文档的位置。
有关 Spring Data LDAP 的完整详细信息,请参阅 reference documentation。
你还可以注入自动配置的 LdapTemplate
实例,就像你使用任何其他 Spring Bean 一样,如下例所示:
Embedded In-memory LDAP Server
出于测试目的,Spring Boot 支持自动配置 UnboundID 中的内存中 LDAP 服务器。若要配置服务器,请添加对 com.unboundid:unboundid-ldapsdk
的依赖,并声明一个 configprop:spring.ldap.embedded.base-dn[] 属性,如下所示:
spring: ldap: embedded: base-dn: "dc=spring,dc=io"
可以定义多个基本 DN 值,但由于 DN 通常包含逗号,因此必须使用正确的符号来定义它们。 在 Yaml 文件中,可以使用 Yaml 列表符号。在属性文件中,必须将索引包含在属性名称中: spring.ldap.embedded.base-dn: - "dc=spring,dc=io" - "dc=vmware,dc=com" |
默认情况下,服务器在随机端口上启动并触发常规 LDAP 支持。无需指定 configprop:spring.ldap.urls[] 属性。
如果在你的类路径上存在一个 schema.ldif
文件,它将用于初始化服务器。如果你想从其他资源中加载初始化脚本,你也可以使用 configprop:spring.ldap.embedded.ldif[] 属性。
默认情况下,一个标准模式用于验证 LDIF
文件。你可以通过设置 configprop:spring.ldap.embedded.validation.enabled[] 属性完全关闭验证。如果你有自定义属性,你可以使用 configprop:spring.ldap.embedded.validation.schema[] 定义你自定义的属性类型或对象类。
InfluxDB
用于 InfluxDB 的自动配置已被弃用,计划在 Spring Boot 3.4 中删除,以支持 the new InfluxDB Java client,它提供了它自己的 Spring Boot 集成。
InfluxDB 是一个开源的时间序列数据库,针对快速、高可用存储和检索诸如操作监控、应用程序指标、物联网传感器数据和实时分析等领域的时间序列数据进行了优化。
Connecting to InfluxDB
Spring Boot 自动配置一个 InfluxDB
实例,前提是 influxdb-java
客户端在类路径中,并且数据库的 URL 使用 configprop:spring.influx.url[已弃用] 设置。
如果连接到 InfluxDB 需要一个用户和密码,你就可以相应地设置 configprop:spring.influx.user[已弃用] 和 configprop:spring.influx.password[已弃用] 属性。
InfluxDB 依赖于 OkHttp。如果你需要调整 http 客户端在幕后使用的 InfluxDB
,你可以注册一个 InfluxDbOkHttpClientBuilderProvider
Bean。
如果你需要更多地控制配置,请考虑注册一个 InfluxDbCustomizer
Bean。