Redis 是一个集缓存、消息代理和键值存储等丰富功能的数据库。Spring Boot 为 和 Jedis 客户端类库提供了基本自动配置, 为他们提供了上层抽象。

    使用 starter 可方便地引入相关依赖。默认情况下,它使用 Lettuce。该 starter 可处理传统应用程序和响应式应用程序。

    提示

    31.1.1、连接 Redis

    您可以像所有 Spring Bean 一样注入自动配置的 RedisConnectionFactoryStringRedisTemplate 或普通的 RedisTemplate 实例。默认情况下,实例将尝试在 localhost:6379 上连接 Redis 服务器,以下是 bean 示例:

    提示

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

    如果您添加了自己的任何一个自动配置类型的 @Bean,它将替换默认设置(除了 RedisTemplate,由于排除是基于 bean 名称,而 redisTemplate 不是它的类型)。默认情况下,如果 commons-pool2 在 classpath 上,您将获得一个连接池工厂。

    31.2、MongoDB

    是一个开源的 NoSQL 文档数据库,其使用了类似 JSON 的模式(schema)来替代传统基于表的关系数据。Spring Boot 为 MongoDB 提供了几种便利的使用方式,包括 spring-boot-starter-data-mongodbspring-boot-starter-data-mongodb-reactive starter。

    31.2.1、连接 MongoDB 数据库

    您可以注入一个自动配置的 org.springframework.data.mongodb.MongoDbFactory 来访问 Mongo 数据库。默认情况下,该实例将尝试在 mongodb://localhost/test 上连接 MongoDB 服务器,以下示例展示了如何连接到 MongoDB 数据库:

    1. import org.springframework.data.mongodb.MongoDbFactory;
    2. import com.mongodb.DB;
    3. @Component
    4. public class MyBean {
    5. private final MongoDbFactory mongo;
    6. @Autowired
    7. public MyBean(MongoDbFactory mongo) {
    8. this.mongo = mongo;
    9. }
    10. // ...
    11. public void example() {
    12. DB db = mongo.getDb();
    13. // ...
    14. }
    15. }

    您可以通过设置 spring.data.mongodb.uri 属性来更改 URL 和配置其他设置,如副本集(replica set):

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

    如果您已经定义了自己的 MongoClient,它将被用于自动配置合适的 MongoDbFactory。支持 com.mongodb.MongoClientcom.mongodb.client.MongoClient

    注意

    如果您使用 Mongo 3.0 Java 驱动,则不支持 spring.data.mongodb.hostspring.data.mongodb.port。这种情况下,应该使用 spring.data.mongodb.uri 来提供所有配置。

    提示

    如果未指定 spring.data.mongodb.port,则使用默认值 27017。您可以将上述示例中的改行配置删除掉。

    提示

    如果您不使用 Spring Data Mongo,则可以注入 com.mongodb.MongoClient bean 来代替 MongoDbFactory。如果要完全控制建立 MongoDB 连接,您还可以声明自己的 MongoDbFactory 或者 MongoClient bean。

    注意

    31.2.2、MongoTemplate

    Spring Data Mongo 提供了一个 类,它的设计与 Spring 的 JdbcTemplate 非常相似。与 JdbcTemplate 一样,Spring Boot 会自动配置一个 bean,以便您能注入模板:

    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.data.mongodb.core.MongoTemplate;
    3. import org.springframework.stereotype.Component;
    4. @Component
    5. public class MyBean {
    6. private final MongoTemplate mongoTemplate;
    7. @Autowired
    8. public MyBean(MongoTemplate mongoTemplate) {
    9. }
    10. // ...
    11. }

    更多详细信息,参照 MongoOperations Javadoc。

    31.2.3、Spring Data MongoDB 资源库

    Spring Data 包含了对 MongoDB 资源库(repository)的支持。与之前讨论的 JPA 资源库一样,基本原理是根据方法名称自动构建查询。

    事实上,Spring Data JPA 和 Spring Data MongoDB 共享通用的底层代码,因此你可以拿之前提到的 JPA 示例作为基础,假设 City 现在是一个 Mongo 数据类,而不是一个 JPA @Entity,他们方式工作相同:

    1. package com.example.myapp.domain;
    2. import org.springframework.data.domain.*;
    3. import org.springframework.data.repository.*;
    4. public interface CityRepository extends Repository<City, Long> {
    5. Page<City> findAll(Pageable pageable);
    6. City findByNameAndStateAllIgnoringCase(String name, String state);
    7. }

    提示

    您可以使用 @EntityScan 注解来自定义文档扫描位置。

    提示

    有关 Spring Data MongoDB 的完整详细内容,包括其丰富的对象关系映射技术,请参考其。

    31.2.4、内嵌 Mongo

    Spring Boot 提供了内嵌 Mongo 的自动配置。要在 Spring Boot 应用程序中使用它,请添加依赖 de.flapdoodle.embed:de.flapdoodle.embed.mongo

    可以使用 spring.data.mongodb.port 属性来配置 Mongo 的监听端口。如果想随机分配空闲端口,请把值设置为 0。MongoAutoConfiguration 创建的 MongoClient 将自动配置随机分配的端口。

    注意

    如果您不配置一个自定义端口,内嵌支持将默认使用一个随机端口(而不是 27017)。

    如果您的 classpath 上有 SLF4J,Mongo 产生的输出将自动路由到名为 org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo 的 logger。

    您可以声明自己的 IMongodConfigIRuntimeConfig bean 来控制 Mongo 实例的配置和日志路由。

    31.3、Neo4j

    是一个开源的 NoSQL 图形数据库,它使用了一个节点由关系连接的富数据模型,比传统 RDBMS 的方式更适合连接大数据。Spring Boot 为 Neo4j 提供了便捷引入方式,包括 spring-boot-starter-data-neo4j starter。

    31.3.1、连接 Neo4j 数据库

    您可以像任何 Spring Bean 一样注入一个自动配置的 org.neo4j.ogm.session.Session。默认情况下, 该实例将尝试使用在 localhost:7687 上使用 Bolt 协议连接到 Neo4j 服务器,以下示例展示了如何注入 一个 Neo4j Session

    1. @Component
    2. public class MyBean {
    3. private final Session session;
    4. public MyBean(Session session) {
    5. this.session = session;
    6. }
    7. // ...
    8. }

    您可以通过配置 spring.data.neo4j.* 属性来设置 uri 和凭据:

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

    您可以通过添加自己的 org.neo4j.ogm.config.Configuration @Bean 来完全控制 session 创建。此外,添加 SessionFactory 类型的 @Bean 会禁用自动配置,因此您可以掌控所有。

    31.3.2、使用内嵌模式

    如果您将 org.neo4j:neo4j-ogm-embedded-driver 添加到应用程序的依赖中,Spring Boot 将自动配置一个进程内内嵌的 Neo4j 实例,当您的应用程序关闭时,该实例将不会保留任何数据。

    注意

    内嵌 Neo4j OGM 驱动本身不提供 Neo4j 您必须自己声明 org.neo4j:neo4j 依赖,请参考 获取兼容版本列表。

    当 classpath 上有多个驱动时,内嵌驱动优先于其他驱动。您可以通过设置 spring.data.neo4j.embedded.enabled=false 来显式禁用内嵌模式。

    如果内嵌驱动和 Neo4j 内核如上所述位于 classpath 上,则 Data Neo4j 测试 会自动使用内嵌 Neo4j 实例。

    注意

    31.3.3、Neo4jSession

    默认情况下,如果您正在运行 Web 应用程序,会话(session)将被绑定到当前请求的整个处理线程(即 Open Session in View 模式)。如果不希望此行为,您可以在 application.properties 中添加以下内容:

    31.3.4、Spring Data Neo4j 资源库

    Spring Data 包括了对 Neo4j 资源库的支持。

    Spring Data Neo4j 与 Spring Data JPA 共享相同的通用底层代码,因此您可以直接把之前的 JPA 示例作为基础,假设 City 现在是一个 Neo4j OGM @NodeEntity,而不是一个 JPA @Entity,并且资源库抽象以相同的方式工作:

    1. package com.example.myapp.domain;
    2. import java.util.Optional;
    3. import org.springframework.data.neo4j.repository.*;
    4. public interface CityRepository extends Neo4jRepository<City, Long> {
    5. Optional<City> findOneByNameAndState(String name, String state);
    6. }

    spring-boot-starter-data-neo4j starter 支持资源库和事务管理。您可以在 @Configuration bean 上分别使用 @EnableNeo4jRepositories@EntityScan 来自定义位置以查找资源库和实体。

    提示

    有关 Spring Data Neo4j 的完整详细信息,包括其对象映射技术,请参阅。

    提供了便捷的 Spring 整合工具,用于访问 Pivotal Gemfire 数据管理平台。 spring-boot-starter-data-gemfire starter 包含了相关依赖。目前没有针对 Gemfire 的自动配置支持,但您可以使用一个来启用 Spring Data 资源库。

    31.5、Solr

    Apache Solr 是一个搜素引擎。Spring Boot 为 Solr 5 客户端类库提供了基本的自动配置,并且 为其提供给了顶层抽象。相关的依赖包含在了 spring-boot-starter-data-solr starter 中。

    31.5.1、连接 Solr

    您可以像其他 Spring Bean 一样注入一个自动配置的 SolrClient 实例。默认情况下,该实例将尝试通过 localhost:8983/solr 连接到服务器,以下示例展示了如何注入一个 Solr bean:

    1. @Component
    2. public class MyBean {
    3. private SolrClient solr;
    4. @Autowired
    5. public MyBean(SolrClient solr) {
    6. this.solr = solr;
    7. }
    8. // ...
    9. }

    如果您添加了自己的 SolrClient 类型的 @Bean,它将替换掉默认配置。

    31.5.2、Spring Data Solr 资源库

    Spring Data 包含了对 Apache Solr 资源库的支持。与之前讨论的 JPA 资源库一样,基本原理是根据方法名称自动构造查询。

    事实上,Spring Data JPA 和 Spring Data Solr 共享了相同的通用底层代码,因此您可以使用之前的 JPA 示例作为基础,假设 City 现在是一个 @SolrDocument 类,而不是一个 JPA @Entity,它的工作方式相同。

    提示

    有关 Spring Data Solr 的完整详细内容,请参考其。

    31.6、Elasticsearch

    Elasticsearch 是一个开源、分布式、RESTful 的实时搜索分析引擎。Spring Boot 为 Elasticsearch 提供了基本的自动配置。

    Spring Boot 支持以下 HTTP 客户端:

    • 官方 Java Low Level(低级)High Level(高级) REST 客户端

    Spring Data Elasticsearch 依旧使用传输客户端,您可以使用 spring-boot-starter-data-elasticsearch starter 引入使用它。

    31.6.1、使用 REST 客户端连接 Elasticsearch

    Elasticsearch 提供了两个可用于查询集群的 :Low Level(低级)High Level(高级)

    如果您的 classpath 上存在 org.elasticsearch.client:elasticsearch-rest-client 依赖,则 Spring Boot 将自动配置并注册默认目标为 localhost:9200RestClient bean。您可以进一步调整 RestClient 的配置,如下所示:

    1. spring.elasticsearch.rest.uris=http://search.example.com:9200
    2. spring.elasticsearch.rest.username=user
    3. spring.elasticsearch.rest.password=secret

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

    如果你 classpath 上有 org.elasticsearch.client:elasticsearch-rest-high-level-client 依赖,Spring Boot 将自动配置一个 RestHighLevelClient,它包装了所有现有的 RestClient bean,重用其 HTTP 配置。

    31.6.2、使用 Jest 连接 Elasticsearch

    如果您的 classpath 上存在 Jest,则可以注入一个默认目标为 的自动配置 JestClient。您还可以进一步调整客户端配置:

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

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

    1. static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer {
    2. public void customize(HttpClientConfig.Builder builder) {
    3. builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5);
    4. }
    5. }

    要完全控制注册流程,请定义一个 JestClient bean。

    31.6.3、使用 Spring Data 连接 Elasticsearch

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

    1. @Component
    2. public class MyBean {
    3. private final ElasticsearchTemplate template;
    4. public MyBean(ElasticsearchTemplate template) {
    5. this.template = template;
    6. }
    7. // ...
    8. }

    如果您添加了自己的 ElasticsearchTemplate 或者 TransportClient @Bean,则其将替代默认配置。

    31.6.4、Spring Data Elasticsearch 资源库

    Spring Data 包含了对 Elasticsearch 资源库的支持,与之前讨论的 JPA 资源库一样,其原理是根据方法名称自动构造查询。

    事实上,Spring Data JPA 与 Spring Data Elasticsearch 共享了相同的通用底层代码,因此您可以使用之前的 JPA 示例作为基础,假设 City 此时是一个 Elasticsearch 类,而不是一个 JPA @Entity,它以相同的方式工作。

    提示

    有关 Spring Data Elasticsearch 的完整详细内容,请参阅其参考文档

    是一个开源的分布式数据库管理系统,旨在处理商用服务器上的大量数据。Spring Boot 为 Cassandra 提供了自动配置,且 Spring Data Cassandra 为其提供了顶层抽象。相关依赖包含在 spring-boot-starter-data-cassandra starter 中。

    31.7.1、连接 Cassandra

    您可以像其他 Spring Bean 一样注入一个自动配置的 CassandraTemplate 或 Cassandra Session 实例。spring.data.cassandra.* 属性可用于自定义连接。通常,您会提供 keyspace-namecontact-points属性:

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

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

    以下代码展示了如何注入一个 Cassandra bean:

    如果您添加了自己的类的为 @CassandraTemplate@Bean,则其将替代默认值。

    31.7.2、Spring Data Cassandra 资源库

    Spring Data 包含了基本的 Cassandra 资源库支持。目前,其限制要比之前讨论的 JPA 资源库要多,并且需要在 finder 方法上使用 @Query 注解。

    提示

    有关 Spring Data Cassandra 的完整详细内容,请参阅其。

    31.8、Couchbase

    Couchbase 是一个开源、分布式多模型的 NoSQL 面向文档数据库,其针对交互式应用程序做了优化。Spring Boot 为 Couchbase 提供了自动配置,且 为其提供了顶层抽象。相关的依赖包含在了 spring-boot-starter-data-couchbase starter 中。

    31.8.1、连接 Couchbase

    您可以通过添加 Couchbase SDK 和一些配置来轻松获取 BucketClusterspring.couchbase.* 属性可用于自定义连接。通常您会配置 bootstrap host、bucket name 和 password:

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

    至少需要提供 bootstrap host,这种情况下,bucket name 为 default 且 password 为空字符串。或者,您可以定义自己的 org.springframework.data.couchbase.config.CouchbaseConfigurer @Bean 来控制整个配置。

    也可以自定义一些 CouchbaseEnvironment 设置。例如,以下配置修改了打开一个新 Bucket 的超时时间和开启了 SSL 支持:

    1. spring.couchbase.env.timeouts.connect=3000
    2. spring.couchbase.env.ssl.key-store=/location/of/keystore.jks
    3. spring.couchbase.env.ssl.key-store-password=secret

    查看 spring.couchbase.env.* 获取更多详细内容。

    31.8.2、Spring Data Couchbase 资源库

    Spring Data 包含了 Couchbase 资源库支持。有关 Spring Data Couchbase 的完整详细信息,请参阅其参考文档

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

    以下示例展示了如何注入一个 Couchbase bean:

    1. @Component
    2. public class MyBean {
    3. private final CouchbaseTemplate template;
    4. @Autowired
    5. public MyBean(CouchbaseTemplate template) {
    6. this.template = template;
    7. }
    8. // ...
    9. }

    您可以在自己的配置中定义以下几个 bean,以覆盖自动配置提供的配置:

    • 一个名为 couchbaseTemplateCouchbaseTemplate @Bean
    • 一个名为 couchbaseIndexManagerIndexManager @Bean
    • 一个名为 couchbaseCustomConversionsCustomConversions @Bean

    为了避免在自己的配置中硬编码这些名称,您可以重用 Spring Data Couchbase 提供的 BeanNames,例如,您可以自定义转换器,如下:

    1. @Configuration
    2. public class SomeConfiguration {
    3. @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
    4. public CustomConversions myCustomConversions() {
    5. return new CustomConversions(...);
    6. }
    7. // ...
    8. }

    提示

    如果您想要安全绕开 Spring Data Couchbase 的自动配置,请提供自己的 org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration 实现。

    31.9、LDAP

    (Lightweight Directory Access Protocol,轻量级目录访问协议)是一个开放、厂商中立的行业标准应用协议,其通过 IP 网络访问和维护分布式目录信息服务。Spring Boot 为兼容 LDAP 服务器提供了自动配置,以及支持从 UnboundID 内嵌内存式 LDAP 服务器。

    提供了 LDAP 抽象。相关依赖包含在了 spring-boot-starter-data-ldap starter 中。

    31.9.1、连接 LDAP 服务器

    要连接 LDAP 服务器,请确保您已经声明了 spring-boot-starter-data-ldap starter 或者 spring-ldap-core 依赖,然后在 application.properties 声明服务器的 URL:

    1. spring.ldap.urls=ldap://myserver:1235
    2. spring.ldap.username=admin
    3. spring.ldap.password=secret

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

    LdapContextSource 将根据这些设置自动配置。如果您需要自定义它,例如使用一个 PooledContextSource,则仍然可以注入自动配置的 LdapContextSource。确保将自定义的 ContextSource 标记为 @Primary,以便自动配置的 LdapTemplate 能使用它。

    31.9.2、Spring Data LDAP 资源库

    Spring Data 包含了 LDAP 资源库支持。有关 Spring Data LDAP 的完整详细信息,请参阅其参考文档

    您还可以像其他 Spring Bean 一样注入一个自动配置的 LdapTemplate 实例:

    1. @Component
    2. public class MyBean {
    3. private final LdapTemplate template;
    4. @Autowired
    5. public MyBean(LdapTemplate template) {
    6. this.template = template;
    7. }
    8. // ...
    9. }

    31.9.3、内嵌内存式 LDAP 服务器

    为了测试目的,Spring Boot 支持从 自动配置一个内存式 LDAP 服务器。要配置服务器,请添加 com.unboundid:unboundid-ldapsdk 依赖并声明一个 base-dn 属性:

      注意

      默认情况下,服务器将在一个随机端口上启动,并触发常规的 LDAP 支持(不需要指定 spring.ldap.urls 属性)。

      如果您的 classpath 上存在一个 schema.ldif 文件,其将用于初始化服务器。如果您想从不同的资源中加载脚本,可以使用 spring.ldap.embedded.ldif 属性。

      默认情况下,将使用一个标准模式(schema)来校验 LDIF 文件。您可以使用 spring.ldap.embedded.validation.enabled 属性来关闭所有校验。如果您有自定义的属性,则可以使用 spring.ldap.embedded.validation.schema 来定义自定义属性类型或者对象类。

      是一个开源时列数据库,其针对运营监控、应用程序指标、物联网传感器数据和实时分析等领域中的时间序列数据在速度、高可用存储和检索方面进行了优化。

      31.10.1、连接 InfluxDB

      Spring Boot 自动配置 InfluxDB 实例,前提是 Influxdb-java 客户端在 classpath 上并且设置了数据库的 URL,如下所示:

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

      InfluxDB 依赖于 OkHttp。如果你需要调整 InfluxDB 在底层使用的 http 客户端,则可以注册一个 InfluxDbOkHttpClientBuilderProvider bean。