Spring Data提供了其余项目来帮助您访问各类NoSQL
技术,包括:html
Spring Boot为Redis
,MongoDB
,Neo4j
,Elasticsearch
,Solr
, Cassandra
,Couchbase
和LDAP
提供自动配置。您可使用其余项目,但必须本身进行配置。请参阅相应的参考文档。java
Redis是一个缓存,消息代理和功能丰富的键值存储。Spring Boot为Lettuce
和Jedis
客户端库以及Spring Data Redis为Lettuce和Jedis提供的最基本的抽象,提供了基本的自动配置。react
spring-boot-starter-data-redis
启动器能够方便地收集依赖关系。默认状况下,它使用 Lettuce
。该启动程序能够处理传统应用程序和响应式应用程序。web
咱们还提供了一个spring-boot-starter-data-redis-reactive
启动器,可与其余存储保持一致,并提供响应性支持。redis
您能够像注入其余任何Spring Bean同样注入自动配置的RedisConnectionFactory
,StringRedisTemplate
或Vanilla RedisTemplate
实例。默认状况下,实例尝试链接到Redis服务器localhost:6379
。下面的清单显示了这种Bean的示例:spring
@Component public class MyBean { private StringRedisTemplate template; @Autowired public MyBean(StringRedisTemplate template) { this.template = template; } // ... }
您还能够注册任意数量的实现LettuceClientConfigurationBuilderCustomizer
的Bean,以使用更高级的自定义。若是您使用Jedis
,JedisClientConfigurationBuilderCustomizer
也可使用。sql
若是添加本身任何一种自动配置类型的@Bean,它将替换默认类型(除非是RedisTemplate
,当基于Bean名称redisTemplate
而不是其类型排除时)。默认状况下,若是commons-pool2
在类路径上,则会获得一个池化链接工厂。mongodb
MongoDB是一个开源NoSQL文档数据库,它使用相似JSON的架构而不是传统的基于表的关系数据。Spring Boot为MongoDB的使用提供了许多便利,包括spring-boot-starter-data-mongodb
和spring-boot-starter-data-mongodb-reactive
启动器。数据库
要访问Mongo数据库,您能够注入自动配置的org.springframework.data.mongodb.MongoDbFactory
。默认状况下,该实例尝试经过mongodb://localhost/test
链接到MongoDB服务器。如下示例显示了如何链接到MongoDB数据库:bootstrap
import org.springframework.data.mongodb.MongoDbFactory; import com.mongodb.DB; @Component public class MyBean { private final MongoDbFactory mongo; @Autowired public MyBean(MongoDbFactory mongo) { this.mongo = mongo; } // ... public void example() { DB db = mongo.getDb(); // ... } }
您能够设置spring.data.mongodb.uri
属性来更改URL并配置其余设置,例如replica set
,如如下示例所示:
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test
另外,只要您使用Mongo 2.x,就能够指定 host/port
。例如,您能够在application.properties中声明如下设置:
spring.data.mongodb.host=mongoserver spring.data.mongodb.port=27017
若是定义了本身的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
或MongoClient
bean。
若是您使用响应式驱动程序,则SSL
须要Netty
。若是可使用Netty而且还没有自定义要使用的工厂,则自动配置会自动配置该工厂。
Spring Data MongoDB提供的MongoTemplate
类在设计上与Spring的JdbcTemplate
很是类似。与JdbcTemplate同样,Spring Boot为您自动配置一个Bean来注入,以下所示:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class MyBean { private final MongoTemplate mongoTemplate; @Autowired public MyBean(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } // ... }
Spring Data包括对MongoDB的存储库支持。与前面讨论的JPA存储库同样,基本原理是根据方法名称自动构造查询。
实际上,Spring Data JPA和Spring Data MongoDB共享相同的通用基础架构。您能够从之前的JPA示例开始,并假设City如今是Mongo数据类而不是JPA @Entity,它的工做方式相同,如如下示例所示:
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndStateAllIgnoringCase(String name, String state); }
您可使用@EntityScan
注解来自定义文档扫描位置。
Spring Boot为Embedded Mongo提供自动配置。要在您的Spring Boot应用程序中使用它,请添加de.flapdoodle.embed:de.flapdoodle.embed.mongo
依赖。
能够经过设置spring.data.mongodb.port
属性来配置Mongo侦听的端口。要使用随机分配的空闲端口,请使用值0
。MongoAutoConfiguration
建立的MongoClient
被自动配置为使用随机分配的端口。
若是未配置自定义端口,则默认状况下,嵌入式支持会使用随机端口
(而不是27017
)。
若是类路径上有SLF4J
,则Mongo产生的输出将自动路由到名为org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo
的记录器。
您能够声明本身的IMongodConfig
和IRuntimeConfig
bean来控制Mongo实例的配置和日志记录路由。能够经过声明DownloadConfigBuilderCustomizer
bean 来定制下载配置。
Neo4j是一个开源NoSQL图形数据库,它使用经过一级关系链接的节点的丰富数据模型,与传统的RDBMS方法相比,它更适合于链接大数据。Spring Boot为Neo4j的使用提供了许多便利,包括spring-boot-starter-data-neo4j
启动器。
要访问Neo4j服务器,您能够注入自动配置的org.neo4j.ogm.session.Session
。默认状况下,实例尝试localhost:7687
使用Bolt
协议链接到Neo4j
服务器。如下示例显示如何注入Neo4j Session:
@Component public class MyBean { private final Session session; @Autowired public MyBean(Session session) { this.session = session; } // ... }
您能够经过设置spring.data.neo4j.*
属性来配置要使用的uri和凭据,如如下示例所示:
spring.data.neo4j.uri=bolt://my-server:7687 spring.data.neo4j.username=neo4j spring.data.neo4j.password=secret
您能够经过添加org.neo4j.ogm.config.Configuration
bean或org.neo4j.ogm.session.SessionFactory
bean 来彻底控制会话的建立。
若是添加org.neo4j:neo4j-ogm-embedded-driver
到应用程序的依赖项,Spring Boot会自动配置Neo4j的进程内嵌入式实例,该实例在应用程序关闭时不会保留任何数据。
因为嵌入式Neo4j OGM驱动程序自己不提供Neo4j内核,所以您必须本身声明org.neo4j:neo4j
为依赖项。有关兼容版本的列表,请参阅Neo4j OGM文档。
当类路径上有多个驱动程序时,嵌入式驱动程序优先于其余驱动程序。您能够经过设置spring.data.neo4j.embedded.enabled=false
显式禁用嵌入式模式。
若是嵌入式驱动程序和Neo4j内核位于上述类路径上,则Data Neo4j Tests会自动使用嵌入式Neo4j实例。
您能够经过在配置中提供数据库文件的路径来启用嵌入式模式的持久性,例如,spring.data.neo4j.uri=file://var/tmp/graph.db
。
Neo4j-OGM能够将某些类型(例如java.time.*
中的类型)映射到基于String属性或Neo4j提供的原生类型之一。出于向后兼容的缘由,Neo4j-OGM的默认设置是使用基于String的表示形式。要使用原生类型,请添加依赖项org.neo4j:neo4j-ogm-bolt-native-types
或org.neo4j:neo4j-ogm-embedded-native-types
,并配置spring.data.neo4j.use-native-types
属性,如如下示例所示:
spring.data.neo4j.use-native-types=true
默认状况下,若是您正在运行Web应用程序,则会话将绑定到线程以进行请求的整个处理(即,它使用“在视图中打开会话”模式)。若是您不但愿出现这种状况,请将如下行添加到您的application.properties文件中:
spring.data.neo4j.open-in-view=false
Spring Data包括对Neo4j的存储库支持。
Spring Data Neo4j与许多其余Spring Data模块同样,与Spring Data JPA共享公共基础结构。您可使用之前的JPA示例,并将City定义为Neo4j OGM @NodeEntity
而不是JPA @Entity,而且存储库抽象以相同的方式工做,如如下示例所示:
package com.example.myapp.domain; import java.util.Optional; import org.springframework.data.neo4j.repository.*; public interface CityRepository extends Neo4jRepository<City, Long> { Optional<City> findOneByNameAndState(String name, String state); }
spring-boot-starter-data-neo4j
启动器启用对存储库的支持以及事务管理。您能够经过在@Configuration
bean 上分别使用@EnableNeo4jRepositories
和@EntityScan
来定制查找存储库和实体的位置。
有关Spring Data Neo4j的完整详细信息,包括其对象映射技术,请参阅参考文档。
Apache Solr是一个搜索引擎。Spring Boot为Solr 5客户端库提供了基本的自动配置,并由Spring Data Solr在其之上提供了抽象。spring-boot-starter-data-solr
“启动器”能够方便地收集依赖关系。
您能够像注入其余任何Spring Bean同样注入自动配置的SolrClient
实例。默认状况下,该实例尝试localhost:8983/solr
链接到服务器。如下示例显示如何注入Solr bean:
@Component public class MyBean { private SolrClient solr; @Autowired public MyBean(SolrClient solr) { this.solr = solr; } // ... }
若是添加本身的SolrClient
@Bean,它将替换默认值。
Spring Data包括对Apache Solr的存储库支持。与前面讨论的JPA存储库同样,基本原理是根据方法名称自动为您构建查询。
实际上,Spring Data JPA和Spring Data Solr共享相同的通用基础结构。您能够从之前的JPA示例开始,假设如今City是一个@SolrDocument
类,而不是JPA @Entity,它的工做方式相同。
Elasticsearch
是一个开源,分布式,RESTful搜索和分析引擎。Spring Boot为Elasticsearch提供了基本的自动配置。
Spring Boot支持多个客户端:
ReactiveElasticsearchClient
传输客户端仍然可用,可是Spring Data Elasticsearch和Elasticsearch自己已弃用了它的支持。它将在未来的版本中删除。Spring Boot提供了专用的 spring-boot-starter-data-elasticsearch
启动器。
因为Elasticsearch和Spring Data Elasticsearch为REST客户端提供了官方支持,所以Jest客户端也已被弃用。
Elasticsearch附带了两个可用于查询集群的REST客户端:“低级”客户端和“高级”客户端。
若是类路径上有org.elasticsearch.client:elasticsearch-rest-client
依赖,Spring Boot将自动配置并注册一个RestClient
bean 默认为localhost:9200
的target。您能够进一步调整RestClient
配置方式,如如下示例所示:
spring.elasticsearch.rest.uris=https://search.example.com:9200 spring.elasticsearch.rest.read-timeout=10s spring.elasticsearch.rest.username=user spring.elasticsearch.rest.password=secret
您还能够注册任意数量的RestClientBuilderCustomizer
Bean,以实现更高级的自定义。要彻底控制注册,请定义一个RestClient
bean。
若是类路径有org.elasticsearch.client:elasticsearch-rest-high-level-client
依赖,Spring Boot将自动配置一个RestHighLevelClient
,包装现有的RestClient
bean,从新使用其HTTP配置。
Spring Data Elasticsearch附带的ReactiveElasticsearchClient
实例以响应方式查询Elasticsearch实例。它创建在WebFlux的WebClient
基础上,所以spring-boot-starter-elasticsearch
和spring-boot-starter-webflux
依赖项对于启用此支持都是有用的。
默认状况下,Spring Boot将自动配置并注册一个ReactiveElasticsearchClient
bean 做为localhost:9200
的target 。您能够进一步调整其配置,如如下示例所示:
spring.data.elasticsearch.client.reactive.endpoints=search.example.com:9200 spring.data.elasticsearch.client.reactive.use-ssl=true spring.data.elasticsearch.client.reactive.socket-timeout=10s spring.data.elasticsearch.client.reactive.username=user spring.data.elasticsearch.client.reactive.password=secret
若是配置属性不够,而且您想彻底控制客户端配置,则能够注册一个自定义ClientConfiguration
bean。
如今,Spring Boot支持官方的RestHighLevelClient
,已废弃Jest支持。
若是Jest在类路径上,则能够注入默认状况下目标为localhost:9200
的自动配置的JestClient
。您能够进一步调整客户端的配置方式,如如下示例所示:
spring.elasticsearch.jest.uris=https://search.example.com:9200 spring.elasticsearch.jest.read-timeout=10000 spring.elasticsearch.jest.username=user spring.elasticsearch.jest.password=secret
您还能够注册任意数量的HttpClientConfigBuilderCustomizer
Bean,以实现更高级的自定义。如下示例调整其余HTTP设置:
static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer { @Override public void customize(HttpClientConfig.Builder builder) { builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5); } }
要彻底控制注册,请定义一个JestClient
bean。
要链接到Elasticsearch,必须定义一个RestHighLevelClient
bean,它由Spring Boot自动配置或由应用程序手动提供(请参阅前面的部分)。有了此配置后,ElasticsearchRestTemplate
能够像其余任何Spring bean同样被注入 ,如如下示例所示:
@Component public class MyBean { private final ElasticsearchRestTemplate template; public MyBean(ElasticsearchRestTemplate template) { this.template = template; } // ... }
在存在spring-data-elasticsearch
和使用WebClient
(一般为spring-boot-starter-webflux
)所需的依赖项的状况下,Spring Boot还能够自动配置ReactiveElasticsearchClient
和ReactiveElasticsearchTemplateas
Bean。它们与其余REST客户端是等效的。
Spring Data包括对Elasticsearch的存储库支持。与前面讨论的JPA存储库同样,基本原理是根据方法名称自动为您构造查询。
实际上,Spring Data JPA和Spring Data Elasticsearch共享相同的通用基础架构。您能够从之前的JPA示例开始,假设如今City是Elasticsearch @Document类而不是JPA @Entity,它的工做方式相同。
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是一个开源的分布式数据库管理系统,旨在处理许多商用服务器上的大量数据。Spring Boot为Cassandra提供自动配置,并由Spring Data Cassandra在其之上提供抽象。spring-boot-starter-data-cassandra
“启动器”能够方便地收集依赖关系。
您能够像使用其余任何Spring Bean同样注入自动配置的CassandraTemplate
实例或Cassandra Session实例。spring.data.cassandra.*
属性可用于自定义链接。一般,您提供keyspace-name
和contact-points
属性,如如下示例所示:
spring.data.cassandra.keyspace-name=mykeyspace spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2
您还能够注册任意数量的ClusterBuilderCustomizer
Bean,以实现更高级的自定义。
如下代码显示了如何注入Cassandra
bean:
@Component public class MyBean { private CassandraTemplate template; @Autowired public MyBean(CassandraTemplate template) { this.template = template; } // ... }
若是添加本身的CassandraTemplate
@Bean,它将替换默认值。
Spring Data包括对Cassandra的基本存储库支持。当前,此功能比前面讨论的JPA存储库更受限制,须要使用@Query
来注解finder方法。
Couchbase是一个开源,分布式,多模型的NoSQL面向文档的数据库,已针对交互式应用程序进行了优化。Spring Boot为Couchbase提供自动配置,并由Spring Data Couchbase在其之上提供抽象。spring-boot-starter-data-couchbase
和spring-boot-starter-data-couchbase-reactive
“启动器”方便的收集依赖关系。
您能够经过添加Couchbase SDK和一些配置来得到Bucket和Cluster。spring.couchbase.*
属性可用于自定义链接。一般,您提供bootstrap主机,bucket名称和密码,如如下示例所示:
spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123 spring.couchbase.bucket.name=my-bucket spring.couchbase.bucket.password=secret
您至少须要提供bootstrap主机,在这种状况下,bucket名称为default,密码为空字符串。另外,您能够定义本身的org.springframework.data.couchbase.config.CouchbaseConfigurer
@Bean来控制整个配置。
也能够自定义某些CouchbaseEnvironment
设置。例如,如下配置更改了用于打开新Bucket并启用SSL支持的超时:
spring.couchbase.env.timeouts.connect=3000 spring.couchbase.env.ssl.key-store=/location/of/keystore.jks spring.couchbase.env.ssl.key-store-password=secret
检查spring.couchbase.env.*
属性以获取更多详细信息。
Spring Data包括对Couchbase的存储库支持。
您能够像使用任何其余Spring Bean同样注入自动配置的CouchbaseTemplate
实例,前提是默认的 CouchbaseConfigurer
可使用(如前所述,启用Couchbase支持时会发生这种状况)。
如下示例显示了如何注入Couchbase
bean:
@Component public class MyBean { private final CouchbaseTemplate template; @Autowired public MyBean(CouchbaseTemplate template) { this.template = template; } // ... }
您能够在本身的配置中定义一些Bean,以覆盖自动配置提供的那些:
couchbaseTemplate
的CouchbaseTemplate
@BeancouchbaseIndexManager
的IndexManager
@BeancouchbaseCustomConversions
的CustomConversions
@Bean为了不在您本身的配置中对这些名称进行硬编码,您能够重复使用Spring Data Couchbase提供的BeanNames
。例如,您能够自定义要使用的转换器,以下所示:
@Configuration(proxyBeanMethods = false) public class SomeConfiguration { @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) public CustomConversions myCustomConversions() { return new CustomConversions(...); } // ... }
若是您想彻底绕过Spring Data Couchbase的自动配置,请提供您本身的org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration
实现。
LDAP(轻量级目录访问协议)是一种开放的,与供应商无关的行业标准应用协议,用于经过IP网络访问和维护分布式目录信息服务。Spring Boot为任何兼容的LDAP服务器提供自动配置,并使用UnboundID
支持嵌入式内存LDAP服务器。
LDAP抽象由Spring Data LDAP提供。spring-boot-starter-data-ldap
“启动器”能够方便地收集依赖关系。
要链接到LDAP服务器,请确保声明spring-boot-starter-data-ldap
“启动器” 或spring-ldap-core
,而后在application.properties中声明服务器的URL,如如下示例所示:
spring.ldap.urls=ldap://myserver:1235 spring.ldap.username=admin spring.ldap.password=secret
若是须要自定义链接设置,可使用spring.ldap.base
和spring.ldap.base-environment
属性。
将根据这些设置自动配置LdapContextSource
。若是您须要对其进行自定义(例如为了使用PooledContextSource
),则仍能够注入自动配置的LdapContextSource。确保将您的定制ContextSource标记为@Primary
,以便自动配置的LdapTemplate
使用它。
Spring Data包括对LDAP的存储库支持。。
您还能够像使用其余任何Spring Bean同样注入自动配置的LdapTemplate
实例,如如下示例所示:
@Component public class MyBean { private final LdapTemplate template; @Autowired public MyBean(LdapTemplate template) { this.template = template; } // ... }
出于测试目的,Spring Boot支持使用UnboundID自动配置内存中的LDAP服务器。要配置服务器,请添加依赖项com.unboundid:unboundid-ldapsdk
并声明spring.ldap.embedded.base-dn
属性,以下所示:
spring.ldap.embedded.base-dn=dc=spring,dc=io
能够定义多个base-dn
值,可是,因为可分辨的名称一般包含逗号,所以必须使用正确的符号来定义它们。
在yaml文件中,您可使用:
spring.ldap.embedded.base-dn: - dc=spring,dc=io - dc=pivotal,dc=io
在properties文件中,必须将索引包括在属性名称中:
spring.ldap.embedded.base-dn[0]=dc=spring,dc=io spring.ldap.embedded.base-dn[1]=dc=pivotal,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-java
客户端位于类路径上而且设置了数据库的URL,Spring Boot会自动配置一个InfluxDB实例,如如下示例所示:
spring.influx.url=https://172.0.0.1:8086
若是与InfluxDB的链接须要用户和密码,则能够相应地设置spring.influx.user
和spring.influx.password
属性。
InfluxDB依赖OkHttp
。若是须要在后台调整http客户端InfluxDB的使用,则能够注册一个InfluxDbOkHttpClientBuilderProvider
bean。