20191127 Spring Boot官方文档学习(4.11)

4.11。使用NoSQL技术

Spring Data提供了其余项目来帮助您访问各类NoSQL技术,包括:html

  • Redis
  • MongoDB
  • Neo4J
  • Solr
  • Elasticsearch
  • Cassandra
  • Couchbase
  • LDAP
  • InfluxDB

Spring Boot为RedisMongoDBNeo4jElasticsearchSolrCassandraCouchbaseLDAP提供自动配置。您可使用其余项目,但必须本身进行配置。请参阅相应的参考文档java

4.11.1。Redis

Redis是一个缓存,消息代理和功能丰富的键值存储。Spring Boot为LettuceJedis客户端库以及Spring Data Redis为Lettuce和Jedis提供的最基本的抽象,提供了基本的自动配置。react

spring-boot-starter-data-redis 启动器能够方便地收集依赖关系。默认状况下,它使用 Lettuce 。该启动程序能够处理传统应用程序和响应式应用程序。web

咱们还提供了一个spring-boot-starter-data-redis-reactive 启动器,可与其余存储保持一致,并提供响应性支持。redis

链接到Redis

您能够像注入其余任何Spring Bean同样注入自动配置的RedisConnectionFactoryStringRedisTemplate或Vanilla RedisTemplate实例。默认状况下,实例尝试链接到Redis服务器localhost:6379。下面的清单显示了这种Bean的示例:spring

@Component
public class MyBean {

    private StringRedisTemplate template;

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

    // ...

}

您还能够注册任意数量的实现LettuceClientConfigurationBuilderCustomizer 的Bean,以使用更高级的自定义。若是您使用JedisJedisClientConfigurationBuilderCustomizer也可使用。sql

若是添加本身任何一种自动配置类型的@Bean,它将替换默认类型(除非是RedisTemplate,当基于Bean名称redisTemplate而不是其类型排除时)。默认状况下,若是commons-pool2在类路径上,则会获得一个池化链接工厂。mongodb

4.11.2。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://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.MongoClientcom.mongodb.client.MongoClient

若是使用Mongo3.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链接的方式,则也能够声明本身的MongoDbFactoryMongoClient bean。

若是您使用响应式驱动程序,则SSL须要Netty。若是可使用Netty而且还没有自定义要使用的工厂,则自动配置会自动配置该工厂。

MongoTemplate

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 Repositories

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注解来自定义文档扫描位置。

嵌入式Mongo

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

能够经过设置spring.data.mongodb.port属性来配置Mongo侦听的端口。要使用随机分配的空闲端口,请使用值0MongoAutoConfiguration建立的MongoClient 被自动配置为使用随机分配的端口。

若是未配置自定义端口,则默认状况下,嵌入式支持会使用随机端口(而不是27017)。

若是类路径上有SLF4J,则Mongo产生的输出将自动路由到名为org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo的记录器。

您能够声明本身的IMongodConfigIRuntimeConfig bean来控制Mongo实例的配置和日志记录路由。能够经过声明DownloadConfigBuilderCustomizer bean 来定制下载配置。

4.11.3。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:

@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-typesorg.neo4j:neo4j-ogm-embedded-native-types,并配置spring.data.neo4j.use-native-types属性,如如下示例所示:

spring.data.neo4j.use-native-types=true

Neo4jSession

默认状况下,若是您正在运行Web应用程序,则会话将绑定到线程以进行请求的整个处理(即,它使用“在视图中打开会话”模式)。若是您不但愿出现这种状况,请将如下行添加到您的application.properties文件中:

spring.data.neo4j.open-in-view=false

Spring Data Neo4j存储库

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的完整详细信息,包括其对象映射技术,请参阅参考文档

4.11.4。Solr

Apache Solr是一个搜索引擎。Spring Boot为Solr 5客户端库提供了基本的自动配置,并由Spring Data Solr在其之上提供了抽象。spring-boot-starter-data-solr“启动器”能够方便地收集依赖关系。

链接到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 Solr存储库

Spring Data包括对Apache Solr的存储库支持。与前面讨论的JPA存储库同样,基本原理是根据方法名称自动为您构建查询。

实际上,Spring Data JPA和Spring Data Solr共享相同的通用基础结构。您能够从之前的JPA示例开始,假设如今City是一个@SolrDocument类,而不是JPA @Entity,它的工做方式相同。

4.11.5。Elasticsearch

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

Spring Boot支持多个客户端:

  • 官方Java“低级”和“高级” REST客户端
  • Spring Data Elasticsearch提供的ReactiveElasticsearchClient

传输客户端仍然可用,可是Spring Data Elasticsearch和Elasticsearch自己已弃用了它的支持。它将在未来的版本中删除。Spring Boot提供了专用的 spring-boot-starter-data-elasticsearch 启动器。

因为Elasticsearch和Spring Data Elasticsearch为REST客户端提供了官方支持,所以Jest客户端也已被弃用。

使用REST客户端链接到Elasticsearch

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配置。

使用反应式REST客户端链接到Elasticsearch

Spring Data Elasticsearch附带的ReactiveElasticsearchClient实例以响应方式查询Elasticsearch实例。它创建在WebFlux的WebClient基础上,所以spring-boot-starter-elasticsearchspring-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。

使用Jest链接到Elasticsearch

如今,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。

使用Spring Data链接到Elasticsearch

要链接到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还能够自动配置ReactiveElasticsearchClientReactiveElasticsearchTemplateas Bean。它们与其余REST客户端是等效的。

Spring Data Elasticsearch存储库

Spring Data包括对Elasticsearch的存储库支持。与前面讨论的JPA存储库同样,基本原理是根据方法名称自动为您构造查询。

实际上,Spring Data JPA和Spring Data Elasticsearch共享相同的通用基础架构。您能够从之前的JPA示例开始,假设如今City是Elasticsearch @Document类而不是JPA @Entity,它的工做方式相同。

Spring Boot使用ElasticsearchRestTemplateReactiveElasticsearchTemplate bean 支持经典和反应式Elasticsearch存储库。给定所需的依赖项,最有可能由Spring Boot自动配置这些bean。

若是您但愿使用本身的模板来支持Elasticsearch存储库,则能够添加本身的ElasticsearchRestTemplateElasticsearchOperations @Bean(只要命名为elasticsearchTemplate)。一样适用于ReactiveElasticsearchTemplateReactiveElasticsearchOperations,Bean名称为reactiveElasticsearchTemplate

您能够选择使用如下属性禁用存储库支持:

spring.data.elasticsearch.repositories.enabled=false

4.11.6。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属性,如如下示例所示:

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存储库

Spring Data包括对Cassandra的基本存储库支持。当前,此功能比前面讨论的JPA存储库更受限制,须要使用@Query来注解finder方法。

4.11.7。Couchbase

Couchbase是一个开源,分布式,多模型的NoSQL面向文档的数据库,已针对交互式应用程序进行了优化。Spring Boot为Couchbase提供自动配置,并由Spring Data Couchbase在其之上提供抽象。spring-boot-starter-data-couchbasespring-boot-starter-data-couchbase-reactive“启动器”方便的收集依赖关系。

链接到Couchbase

您能够经过添加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 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,以覆盖自动配置提供的那些:

  • 名称为couchbaseTemplateCouchbaseTemplate @Bean
  • 名称为couchbaseIndexManagerIndexManager @Bean
  • 名称为couchbaseCustomConversionsCustomConversions @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实现。

4.11.8。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,如如下示例所示:

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

若是须要自定义链接设置,可使用spring.ldap.basespring.ldap.base-environment属性。

将根据这些设置自动配置LdapContextSource。若是您须要对其进行自定义(例如为了使用PooledContextSource),则仍能够注入自动配置的LdapContextSource。确保将您的定制ContextSource标记为@Primary,以便自动配置的LdapTemplate使用它。

Spring Data LDAP存储库

Spring Data包括对LDAP的存储库支持。。

您还能够像使用其余任何Spring Bean同样注入自动配置的LdapTemplate实例,如如下示例所示:

@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并声明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来定义定制属性类型或对象类。

4.11.9。InfluxDB

InfluxDB是一个开源的时间序列数据库,已优化用于在操做监视,应用程序度量,物联网传感器数据和实时分析等领域中快速,高可用性地存储和检索时间序列数据。

链接到InfluxDB

若是influxdb-java客户端位于类路径上而且设置了数据库的URL,Spring Boot会自动配置一个InfluxDB实例,如如下示例所示:

spring.influx.url=https://172.0.0.1:8086

若是与InfluxDB的链接须要用户和密码,则能够相应地设置spring.influx.userspring.influx.password属性。

InfluxDB依赖OkHttp。若是须要在后台调整http客户端InfluxDB的使用,则能够注册一个InfluxDbOkHttpClientBuilderProvider bean。

相关文章
相关标签/搜索