NoSQL Technologies

Spring Data提供了其他项目,可帮助您访问各种NoSQL技术,包括: MongoDBNeo4JElasticsearchSolrRedisGemfireCassandraCouchbaseLDAP。Spring Boot为Redis,MongoDB,Neo4j,Elasticsearch,Solr Cassandra,Couchbase和LDAP提供自动配置。您可以使用其他项目,但必须自己配置它们。请参阅projects.spring.io/spring-data上的相应参考文档 。

Redis

Redis是一个缓存,消息代理和功能丰富的键值存储。Spring Boot为LettuceJedis客户端库提供了基本的自动配置, 并为Spring Data Redis提供了它们之外的抽象。

有一个spring-boot-starter-data-redis“Starter”用于以方便的方式收集依赖项。默认情况下,它使用 Lettuce。该启动器处理传统和反应应用程序。

我们还提供一个spring-boot-starter-data-redis-reactive启动器,以便与其他具有反应支持的商店保持一致。

连接到Redis

你可以注入的自动配置RedisConnectionFactoryStringRedisTemplate或香草RedisTemplate,就像任何其他的Spring Bean实例。默认情况下,实例尝试连接到Redis服务器localhost:6379。以下清单显示了这样一个bean的示例:

1
2
3
4
5
6
7
8
9
10
11
@Component
public class MyBean {

private StringRedisTemplate template;

@Autowired
public MyBean(StringRedisTemplate template) {
this.template = template;
}
// ...
}

您还可以注册任意数量的bean,以实现 LettuceClientConfigurationBuilderCustomizer更高级的自定义。如果您使用Jedis,JedisClientConfigurationBuilderCustomizer也可以使用。

如果您添加自己@Bean的任何自动配置类型,它将替换默认值(除非在RedisTemplate排除基于bean名称时 redisTemplate,而不是其类型)。默认情况下,如果commons-pool2在类路径上,则会获得池化连接工厂。

MongoDB

MongoDB是一个开源的NoSQL文档数据库,它使用类似JSON的模式而不是传统的基于表的关系数据。Spring Boot提供了一些使用MongoDB的便利,包括spring-boot-starter-data-mongodbspring-boot-starter-data-mongodb-reactive 启动器。

连接到MongoDB数据库

要访问Mongo数据库,可以注入自动配置 org.springframework.data.mongodb.MongoDbFactory。默认情况下,实例尝试连接到MongoDB服务器mongodb://localhost/test。以下示例显示如何连接到MongoDB数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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并配置其他设置,例如副本集,如以下示例所示:

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
2
spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017

如果您已经定义了自己的MongoClient,它将用于自动配置合适的 MongoDbFactory。这两个com.mongodb.MongoClientcom.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.MongoClientbean而不是使用MongoDbFactory。如果要完全控制建立MongoDB连接,还可以声明自己的 bean MongoDbFactoryMongoClientbean。

如果您使用的是反应式驱动程序,则SSL需要Netty。如果Netty可用并且尚未自定义要使用的工厂,则自动配置会自动配置此工厂。

MongoTemplate

Spring Data MongoDB提供了一个MongoTemplate与Spring的设计非常相似的 类JdbcTemplate。与此同时JdbcTemplate,Spring Boot会自动为您配置一个bean来注入模板,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}

// ...

}

有关完整的详细信息,请参阅 MongoOperations Javadoc

Spring Data MongoDB存储库

Spring Data包括MongoDB的存储库支持。与前面讨论的JPA存储库一样,基本原则是基于方法名称自动构造查询。

事实上,Spring Data JPA和Spring Data MongoDB共享相同的通用基础架构。您可以从之前获取JPA示例,并假设它City现在是Mongo数据类而不是JPA @Entity,它的工作方式相同,如下例所示:

1
2
3
4
5
6
7
8
9
10
11
12
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 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 IMongodConfigIRuntimeConfigbean来控制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
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class MyBean {

private final Session session;

@Autowired
public MyBean(Session session) {
this.session = session;
}

// ...

}

您可以通过设置spring.data.neo4j.* 属性来配置要使用的URI和凭据,如以下示例所示:

1
2
3
spring.data.neo4j.uri=bolt://my-server:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=secret

您可以通过添加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
2
3
4
5
6
7
8
9
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“入门”使仓库的支持以及事务管理。您可以自定义的位置通过查找资料库和实体@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
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class MyBean {

private SolrClient solr;

@Autowired
public MyBean(SolrClient solr) {
this.solr = solr;
}

// ...

}

如果添加自己@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
2
3
spring.elasticsearch.rest.uris=http://search.example.com:9200
spring.elasticsearch.rest.username=user
spring.elasticsearch.rest.password=secret

您还可以注册任意数量的bean,以实现 RestClientBuilderCustomizer更高级的自定义。要完全控制注册,请定义RestClientbean。

如果您org.elasticsearch.client:elasticsearch-rest-high-level-client对类路径有依赖性,Spring Boot将自动配置a RestHighLevelClient,它包装任何现有的RestClientbean,重用其HTTP配置。

使用Jest连接到Elasticsearch

如果您具有Jest类路径,则可以注入JestClient默认目标的自动配置localhost:9200。您可以进一步调整客户端的配置方式,如以下示例所示:

1
2
3
4
spring.elasticsearch.jest.uris=http://search.example.com:9200
spring.elasticsearch.jest.read-timeout=10000
spring.elasticsearch.jest.username=user
spring.elasticsearch.jest.password=secret

您还可以注册任意数量的bean,以实现 HttpClientConfigBuilderCustomizer更高级的自定义。以下示例调整其他HTTP设置:

1
2
3
4
5
6
7
8
static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer {

@Override
public void customize(HttpClientConfig.Builder builder) {
builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5);
}

}

要完全控制注册,请定义JestClientbean。

使用Spring数据连接Elasticsearch

要连接到Elasticsearch,您必须提供一个或多个群集节点的地址。可以通过将spring.data.elasticsearch.cluster-nodes 属性设置为逗号分隔host:port列表来指定地址。使用此配置, 可以像任何其他Spring bean一样注入ElasticsearchTemplateTransportClient注入,如以下示例所示:

1
spring.data.elasticsearch.cluster-nodes=localhost:9300
1
2
3
4
5
6
7
8
9
10
11
12
@Component
public class MyBean {

private final ElasticsearchTemplate template;

public MyBean(ElasticsearchTemplate template) {
this.template = template;
}

// ...

}

如果您添加自己的ElasticsearchTemplateTransportClient @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-namecontact-points属性,如以下示例所示:

1
2
spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2

您还可以注册任意数量的bean,以实现 ClusterBuilderCustomizer更高级的自定义。

以下代码清单显示了如何注入Cassandra bean:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class MyBean {

private CassandraTemplate template;

@Autowired
public MyBean(CassandraTemplate template) {
this.template = template;
}

// ...

}

如果添加自己@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-couchbasespring-boot-starter-data-couchbase-reactive 启动器方便的方法收集的依赖关系。

连接到Couchbase

你可以得到一个BucketCluster通过添加Couchbase SDK和一些配置。这些spring.couchbase.*属性可用于自定义连接。通常,您提供引导主机,存储桶名称和密码,如以下示例所示:

1
2
3
spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123
spring.couchbase.bucket.name=my-bucket
spring.couchbase.bucket.password=secret

您需要至少提供引导主机,在这种情况下,存储桶名称为 default,密码为空字符串。或者,您可以定义自己的org.springframework.data.couchbase.config.CouchbaseConfigurer @Bean控件来控制整个配置。

也可以自定义一些CouchbaseEnvironment设置。例如,以下配置更改用于打开新的超时Bucket 并启用SSL支持的超时:

1
2
3
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 Data包括对Couchbase的存储库支持。有关Spring Data Couchbase的完整详细信息,请参阅 参考文档

您可以CouchbaseTemplate像使用任何其他Spring Bean一样注入自动配置的实例,只要有默认值 CouchbaseConfigurer(当您启用Couchbase支持时会发生这种情况,如前所述)。

以下示例显示了如何注入Couchbase bean:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class MyBean {

private final CouchbaseTemplate template;

@Autowired
public MyBean(CouchbaseTemplate template) {
this.template = template;
}

// ...

}

您可以在自己的配置中定义一些bean来覆盖自动配置提供的bean:

  • CouchbaseTemplate @Bean的名字是couchbaseTemplate
  • IndexManager @Bean用的名称couchbaseIndexManager
  • CustomConversions @Bean的名字是couchbaseCustomConversions

为避免在您自己的配置中对这些名称进行硬编码,您可以重复使用BeanNamesSpring Data Couchbase。例如,您可以自定义要使用的转换器,如下所示:

1
2
3
4
5
6
7
8
9
10
11
@Configuration
public class SomeConfiguration {

@Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
public CustomConversions myCustomConversions() {
return new CustomConversions(...);
}

// ...

}

如果要完全绕过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
2
3
spring.ldap.urls=ldap://myserver:1235
spring.ldap.username=admin
spring.ldap.password=secret

如果需要自定义连接设置,可以使用spring.ldap.basespring.ldap.base-environment属性。

一种LdapContextSource是自动配置基于这些设置。如果您需要自定义它,例如使用a PooledContextSource,您仍然可以注入自动配置LdapContextSource。确保将自定义标记ContextSource@Primary自动配置LdapTemplate使用它。

Spring Data LDAP存储库

Spring Data包括对LDAP的存储库支持。有关Spring Data LDAP的完整详细信息,请参阅 参考文档

您也可以LdapTemplate像使用任何其他Spring Bean一样注入自动配置的实例,如以下示例所示:

1
2
3
4
5
6
7
8
9
10
11
12
@Component
public class MyBean {
private final LdapTemplate template;

@Autowired
public MyBean(LdapTemplate template) {
this.template = template;
}

// ...

}

嵌入式内存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
2
3
spring.ldap.embedded.base-dn:
- dc=spring,dc=io
- dc=pivotal,dc=io

在属性文件中,必须包含索引作为属性名称的一部分:

1
2
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是一个开源时间序列数据库,针对运营监控,应用程序指标,物联网传感器数据和实时分析等领域中的时间序列数据的快速,高可用性存储和检索进行了优化。

连接到InfluxDB

InfluxDB如果influxdb-java客户端在类路径上并且设置了数据库的URL,则Spring Boot会自动配置实例,如以下示例所示:

1
spring.influx.url=http://172.0.0.1:8086

如果与InfluxDB的连接需要用户和密码,则可以相应地设置 spring.influx.userspring.influx.password属性。

InfluxDB依赖于OkHttp。如果需要调整http客户端InfluxDB在幕后使用,可以注册一个InfluxDbOkHttpClientBuilderProviderbean。