NoSQL Technologies
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上的相应参考文档 。
Redis
Redis是一个缓存,消息代理和功能丰富的键值存储。Spring Boot为Lettuce和 Jedis客户端库提供了基本的自动配置, 并为Spring Data Redis提供了它们之外的抽象。
有一个spring-boot-starter-data-redis
“Starter”用于以方便的方式收集依赖项。默认情况下,它使用 Lettuce。该启动器处理传统和反应应用程序。
我们还提供一个
spring-boot-starter-data-redis-reactive
启动器,以便与其他具有反应支持的商店保持一致。
连接到Redis
你可以注入的自动配置RedisConnectionFactory
,StringRedisTemplate
或香草RedisTemplate
,就像任何其他的Spring Bean实例。默认情况下,实例尝试连接到Redis服务器localhost:6379
。以下清单显示了这样一个bean的示例:
1 |
|
您还可以注册任意数量的bean,以实现
LettuceClientConfigurationBuilderCustomizer
更高级的自定义。如果您使用Jedis,JedisClientConfigurationBuilderCustomizer
也可以使用。
如果您添加自己@Bean
的任何自动配置类型,它将替换默认值(除非在RedisTemplate
排除基于bean名称时 redisTemplate
,而不是其类型)。默认情况下,如果commons-pool2
在类路径上,则会获得池化连接工厂。
MongoDB
MongoDB是一个开源的NoSQL文档数据库,它使用类似JSON的模式而不是传统的基于表的关系数据。Spring Boot提供了一些使用MongoDB的便利,包括spring-boot-starter-data-mongodb
和spring-boot-starter-data-mongodb-reactive
启动器。
连接到MongoDB数据库
要访问Mongo数据库,可以注入自动配置 org.springframework.data.mongodb.MongoDbFactory
。默认情况下,实例尝试连接到MongoDB服务器mongodb://localhost/test
。以下示例显示如何连接到MongoDB数据库:
1 | import org.springframework.data.mongodb.MongoDbFactory; |
您可以设置该spring.data.mongodb.uri
属性以更改URL并配置其他设置,例如副本集,如以下示例所示:
1 | spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test |
或者,只要您使用Mongo 2.x,就可以指定host
/ port
。例如,您可以在以下内容中声明以下设置application.properties
:
1 | spring.data.mongodb.host=mongoserver |
如果您已经定义了自己的MongoClient
,它将用于自动配置合适的 MongoDbFactory
。这两个com.mongodb.MongoClient
和com.mongodb.client.MongoClient
支持。
如果使用蒙戈3.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连接,还可以声明自己的 beanMongoDbFactory
或MongoClient
bean。
如果您使用的是反应式驱动程序,则SSL需要Netty。如果Netty可用并且尚未自定义要使用的工厂,则自动配置会自动配置此工厂。
MongoTemplate
Spring Data MongoDB提供了一个MongoTemplate
与Spring的设计非常相似的 类JdbcTemplate
。与此同时JdbcTemplate
,Spring Boot会自动为您配置一个bean来注入模板,如下所示:
1 | import org.springframework.beans.factory.annotation.Autowired; |
有关完整的详细信息,请参阅 MongoOperations
Javadoc。
Spring Data MongoDB存储库
Spring Data包括MongoDB的存储库支持。与前面讨论的JPA存储库一样,基本原则是基于方法名称自动构造查询。
事实上,Spring Data JPA和Spring Data MongoDB共享相同的通用基础架构。您可以从之前获取JPA示例,并假设它City
现在是Mongo数据类而不是JPA @Entity
,它的工作方式相同,如下例所示:
1 | package com.example.myapp.domain; |
您可以使用
@EntityScan
注释自定义文档扫描位置。
有关Spring Data MongoDB的完整详细信息,包括其丰富的对象映射技术,请参阅其参考文档。
嵌入式Mongo
Spring Boot为Embedded Mongo提供自动配置 。要在Spring Boot应用程序中使用它,请添加依赖项 de.flapdoodle.embed:de.flapdoodle.embed.mongo
。
可以通过设置spring.data.mongodb.port
属性来配置Mongo侦听的端口。要使用随机分配的空闲端口,请使用值0. MongoClient
创建者MongoAutoConfiguration
自动配置为使用随机分配的端口。
如果未配置自定义端口,则默认情况下,嵌入式支持使用随机端口(而不是27017)。
如果类路径上有SLF4J,则Mongo生成的输出会自动路由到名为的记录器org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo
。
您可以声明自己的bean IMongodConfig
和IRuntimeConfig
bean来控制Mongo实例的配置和日志记录路由。
Neo4j
Neo4j是一个开源的NoSQL图形数据库,它使用由一级关系连接的节点的丰富数据模型,与传统的RDBMS方法相比,它更适合于连接的大数据。Spring Boot为使用Neo4j提供了一些便利,包括spring-boot-starter-data-neo4j
启动器。
连接到Neo4j数据库
要访问Neo4j服务器,您可以注入自动配置 org.neo4j.ogm.session.Session
。默认情况下,实例尝试localhost:7687
使用Bolt协议连接到Neo4j服务器。以下示例显示了如何注入Neo4j Session
:
1 |
|
您可以通过设置spring.data.neo4j.*
属性来配置要使用的URI和凭据,如以下示例所示:
1 | spring.data.neo4j.uri=bolt://my-server:7687 |
您可以通过添加a来完全控制会话创建 org.neo4j.ogm.config.Configuration
@Bean
。此外,添加一个@Bean
类型 SessionFactory
会禁用自动配置并为您提供完全控制。
使用嵌入模式
如果添加org.neo4j:neo4j-ogm-embedded-driver
到应用程序的依赖项,Spring Boot会自动配置Neo4j的进程内嵌入式实例,该应用程序在应用程序关闭时不会保留任何数据。
由于嵌入式Neo4j OGM驱动程序本身不提供Neo4j内核,因此您必须自己声明
org.neo4j:neo4j
为依赖项。有关兼容版本的列表,请参阅 Neo4j OGM文档。
当类路径上有多个驱动程序时,嵌入式驱动程序优先于其他驱动程序。您可以通过设置明确禁用嵌入模式 spring.data.neo4j.embedded.enabled=false
。
如果嵌入式驱动程序和Neo4j内核如上所述位于类路径上,则数据Neo4j测试会自动使用嵌入式Neo4j实例。
您可以通过在配置中提供数据库文件的路径来为嵌入模式启用持久性,例如
spring.data.neo4j.uri=file://var/tmp/graph.db
。
Neo4jSession
默认情况下,如果您正在运行Web应用程序,则会话将绑定到线程以进行整个请求处理(即,它使用“在视图中打开会话”模式)。如果您不想要此行为,请将以下行添加到您的 application.properties
文件中:
1 | spring.data.neo4j.embedded.enabled=false |
Spring Data Neo4j存储库
Spring Data包含对Neo4j的存储库支持。
Spring Data Neo4j与Spring Data JPA共享通用基础架构,就像许多其他Spring Data模块一样。您可以从之前的JPA示例中获取并定义 City
为Neo4j OGM @NodeEntity
而不是JPA @Entity
,并且存储库抽象以相同的方式工作,如以下示例所示:
1 | package com.example.myapp.domain; |
在spring-boot-starter-data-neo4j
“入门”使仓库的支持以及事务管理。您可以自定义的位置通过查找资料库和实体@EnableNeo4jRepositories
,并@EntityScan
分别在 @Configuration
-bean。
有关Spring Data Neo4j的完整详细信息,包括其对象映射技术,请参阅参考文档。
Gemfire
Spring Data Gemfire为访问Pivotal Gemfire数据管理平台提供了方便的Spring友好工具 。有一个spring-boot-starter-data-gemfire
启动器用于以方便的方式收集依赖项。目前没有对Gemfire的自动配置支持,但您可以使用单个注释@EnableGemfireRepositories
启用Spring Data Repositories : .
Solr
Apache Solr是一个搜索引擎。Spring Boot为Solr 5客户端库提供了基本的自动配置,并为Spring Data Solr提供了它的抽象。有一个spring-boot-starter-data-solr
启动器用于以方便的方式收集依赖项。
连接到Solr
您可以SolrClient
像任何其他Spring bean一样注入自动配置的实例。默认情况下,实例尝试连接到服务器 localhost:8983/solr
。以下示例显示如何注入Solr bean:
1 |
|
如果添加自己@Bean
的类型SolrClient
,则会替换默认值。
Spring Data Solr存储库
Spring Data包括Apache Solr的存储库支持。与前面讨论的JPA存储库一样,基本原则是根据方法名称自动构造查询。
事实上,Spring Data JPA和Spring Data Solr共享相同的通用基础架构。您可以从之前获取JPA示例,并假设它City
现在是一个 @SolrDocument
类而不是JPA @Entity
,它以相同的方式工作。
有关Spring Data Solr的完整详细信息,请参阅 参考文档。
Elasticsearch
Elasticsearch是一个开源,分布式,RESTful搜索和分析引擎。Spring Boot为Elasticsearch提供基本的自动配置。
Spring Boot支持多个HTTP客户端:
- 官方Java“低级”和“高级”REST客户端
- 笑话
Spring Data Elasticsearch仍在使用传输客户端 ,您可以使用spring-boot-starter-data-elasticsearch
启动器开始使用它。
REST客户端连接到Elasticsearch
Elasticsearch提供了 两个 可用于查询集群的REST客户端:“低级”客户端和“高级”客户端。
如果您org.elasticsearch.client:elasticsearch-rest-client
依赖于类路径,Spring Boot将自动配置并注册RestClient
默认目标的bean localhost:9200
。您可以进一步调整RestClient
配置方式,如以下示例所示:
1 | spring.elasticsearch.rest.uris=http://search.example.com:9200 |
您还可以注册任意数量的bean,以实现 RestClientBuilderCustomizer
更高级的自定义。要完全控制注册,请定义RestClient
bean。
如果您org.elasticsearch.client:elasticsearch-rest-high-level-client
对类路径有依赖性,Spring Boot将自动配置a RestHighLevelClient
,它包装任何现有的RestClient
bean,重用其HTTP配置。
使用Jest连接到Elasticsearch
如果您具有Jest
类路径,则可以注入JestClient
默认目标的自动配置localhost:9200
。您可以进一步调整客户端的配置方式,如以下示例所示:
1 | spring.elasticsearch.jest.uris=http://search.example.com:9200 |
您还可以注册任意数量的bean,以实现 HttpClientConfigBuilderCustomizer
更高级的自定义。以下示例调整其他HTTP设置:
1 | static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer { |
要完全控制注册,请定义JestClient
bean。
使用Spring数据连接Elasticsearch
要连接到Elasticsearch,您必须提供一个或多个群集节点的地址。可以通过将spring.data.elasticsearch.cluster-nodes
属性设置为逗号分隔host:port
列表来指定地址。使用此配置, 可以像任何其他Spring bean一样注入ElasticsearchTemplate
或TransportClient
注入,如以下示例所示:
1 | spring.data.elasticsearch.cluster-nodes=localhost:9300 |
1 |
|
如果您添加自己的ElasticsearchTemplate
或TransportClient
@Bean
,它将替换默认值。
Spring Data Elasticsearch存储库
Spring Data包括对Elasticsearch的存储库支持。与前面讨论的JPA存储库一样,基本原则是根据方法名称自动为您构建查询。
事实上,Spring Data JPA和Spring Data Elasticsearch共享相同的通用基础架构。您可以从之前的JPA示例中获取,假设它City
现在是Elasticsearch @Document
类而不是JPA @Entity
,它的工作方式相同。
有关Spring Data Elasticsearch的完整详细信息,请参阅 参考文档。
Cassandra
Cassandra是一个开源的分布式数据库管理系统,旨在处理许多商用服务器上的大量数据。Spring Boot提供了Cassandra的自动配置以及Spring Data Cassandra提供的抽象。有一个spring-boot-starter-data-cassandra
启动器用于以方便的方式收集依赖项。
连接到Cassandra
您可以像使用任何其他Spring Bean一样注入自动配置CassandraTemplate
或Cassandra Session
实例。这些spring.data.cassandra.*
属性可用于自定义连接。通常,您提供keyspace-name
和 contact-points
属性,如以下示例所示:
1 | spring.data.cassandra.keyspace-name=mykeyspace |
您还可以注册任意数量的bean,以实现 ClusterBuilderCustomizer
更高级的自定义。
以下代码清单显示了如何注入Cassandra bean:
1 |
|
如果添加自己@Bean
的类型CassandraTemplate
,则会替换默认值。
Spring Data Cassandra存储库
Spring Data包含对Cassandra的基本存储库支持。目前,这比前面讨论的JPA存储库更有限,需要使用注释查找器方法@Query
。
有关Spring Data Cassandra的完整详细信息,请参阅 参考文档。
Couchbase
Couchbase是一个开源的,分布式的,多模型的NoSQL面向文档的数据库,针对交互式应用程序进行了优化。Spring Boot提供了Couchbase的自动配置以及Spring Data Couchbase提供的抽象 。有一个 spring-boot-starter-data-couchbase
和spring-boot-starter-data-couchbase-reactive
启动器方便的方法收集的依赖关系。
连接到Couchbase
你可以得到一个Bucket
和Cluster
通过添加Couchbase SDK和一些配置。这些spring.couchbase.*
属性可用于自定义连接。通常,您提供引导主机,存储桶名称和密码,如以下示例所示:
1 | spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123 |
您需要至少提供引导主机,在这种情况下,存储桶名称为
default
,密码为空字符串。或者,您可以定义自己的org.springframework.data.couchbase.config.CouchbaseConfigurer
@Bean
控件来控制整个配置。
也可以自定义一些CouchbaseEnvironment
设置。例如,以下配置更改用于打开新的超时Bucket
并启用SSL支持的超时:
1 | spring.couchbase.env.timeouts.connect=3000 |
检查spring.couchbase.env.*
属性以获取更多详细信息。
Spring Data Couchbase存储库
Spring Data包括对Couchbase的存储库支持。有关Spring Data Couchbase的完整详细信息,请参阅 参考文档。
您可以CouchbaseTemplate
像使用任何其他Spring Bean一样注入自动配置的实例,只要有默认值 CouchbaseConfigurer
(当您启用Couchbase支持时会发生这种情况,如前所述)。
以下示例显示了如何注入Couchbase bean:
1 |
|
您可以在自己的配置中定义一些bean来覆盖自动配置提供的bean:
CouchbaseTemplate
@Bean
的名字是couchbaseTemplate
。IndexManager
@Bean
用的名称couchbaseIndexManager
。CustomConversions
@Bean
的名字是couchbaseCustomConversions
。
为避免在您自己的配置中对这些名称进行硬编码,您可以重复使用BeanNames
Spring Data Couchbase。例如,您可以自定义要使用的转换器,如下所示:
1 |
|
如果要完全绕过Spring Data Couchbase的自动配置,请提供自己的实现
org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration
。
LDAP
LDAP(轻量级目录访问协议)是一种开放的,与供应商无关的行业标准应用程序协议,用于通过IP网络访问和维护分布式目录信息服务。Spring Boot为任何兼容的LDAP服务器提供自动配置,并为UnboundID支持嵌入式内存中LDAP服务器 。
LDAP抽象由 Spring Data LDAP提供。有一个spring-boot-starter-data-ldap
启动器用于以方便的方式收集依赖项。
连接LDAP服务器
要连接到LDAP服务器,请确保声明对spring-boot-starter-data-ldap
启动器 的依赖关系 spring-ldap-core
,然后在application.properties中声明服务器的URL,如以下示例所示:
1 | spring.ldap.urls=ldap://myserver:1235 |
如果需要自定义连接设置,可以使用spring.ldap.base
和 spring.ldap.base-environment
属性。
一种LdapContextSource
是自动配置基于这些设置。如果您需要自定义它,例如使用a PooledContextSource
,您仍然可以注入自动配置LdapContextSource
。确保将自定义标记ContextSource
为@Primary
自动配置LdapTemplate
使用它。
Spring Data LDAP存储库
Spring Data包括对LDAP的存储库支持。有关Spring Data LDAP的完整详细信息,请参阅 参考文档。
您也可以LdapTemplate
像使用任何其他Spring Bean一样注入自动配置的实例,如以下示例所示:
1 |
|
嵌入式内存LDAP服务器
出于测试目的,Spring Boot支持从UnboundID自动配置内存中的LDAP服务器。要配置服务器,请向依赖项添加依赖项com.unboundid:unboundid-ldapsdk
并声明base-dn
属性,如下所示:
1 | spring.ldap.embedded.base-dn=dc=spring,dc=io |
可以定义多个base-dn值,但是,由于可分辨名称通常包含逗号,因此必须使用正确的表示法定义它们。
在yaml文件中,您可以使用yaml列表表示法:
1 | spring.ldap.embedded.base-dn: |
在属性文件中,必须包含索引作为属性名称的一部分:
1 | spring.ldap.embedded.base-dn[0]=dc=spring,dc=io |
默认情况下,服务器在随机端口上启动并触发常规LDAP支持。无需指定spring.ldap.urls
属性。
如果schema.ldif
类路径中有文件,则用于初始化服务器。如果要从其他资源加载初始化脚本,还可以使用该spring.ldap.embedded.ldif
属性。
默认情况下,标准模式用于验证LDIF
文件。您可以通过设置spring.ldap.embedded.validation.enabled
属性完全关闭验证。如果您有自定义属性,则可以使用它spring.ldap.embedded.validation.schema
来定义自定义属性类型或对象类。
InfluxDB
InfluxDB是一个开源时间序列数据库,针对运营监控,应用程序指标,物联网传感器数据和实时分析等领域中的时间序列数据的快速,高可用性存储和检索进行了优化。
连接到InfluxDB
InfluxDB
如果influxdb-java
客户端在类路径上并且设置了数据库的URL,则Spring Boot会自动配置实例,如以下示例所示:
1 | spring.influx.url=http://172.0.0.1:8086 |
如果与InfluxDB的连接需要用户和密码,则可以相应地设置 spring.influx.user
和spring.influx.password
属性。
InfluxDB依赖于OkHttp。如果需要调整http客户端InfluxDB
在幕后使用,可以注册一个InfluxDbOkHttpClientBuilderProvider
bean。