20220519 Data - 2. Working with NoSQL Technologies

前言

文档地址

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

Spring Boot为 RedisMongoDBNeo4jElasticsearchSolrCassandraCouchbase , LDAPInfluxDB 提供自动配置。此外, Spring Boot for Apache Geode 提供了 Apache Geode的 自动配置 。您可以使用其他项目,但必须自己进行配置。请参阅 相应的参考文档

2.1. Redis

Redis 是一个缓存,消息 broker 和功能丰富的键值存储。Spring Boot 为 LettuceJedis 客户端库提供了基本的自动配置,并且 Spring Data Redis 在其上提供了抽象。

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

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

2.1.1. 连接到 Redis

您可以像注入其他任何 Spring bean 一样注入自动配置的 RedisConnectionFactoryStringRedisTemplate 或 vanilla RedisTemplate 实例。**默认情况下,实例尝试连接到 Redis 服务器 localhost:6379 **

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final StringRedisTemplate template;

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

    public Boolean someMethod() {
        return this.template.hasKey("spring");
    }

}

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

或者,您可以注册一个 RedisStandaloneConfiguration , RedisSentinelConfigurationRedisClusterConfiguration 类型的 bean 来完全控制配置。

如果您添加任何自动配置类型的 @Bean ,它将替换默认类型(除了 RedisTemplate ,当排除基于 bean 名称 redisTemplate 而不是它的类型时)

默认情况下,如果 commons-pool2 在类路径上,池化连接工厂会自动配置。

2.2. MongoDB

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

2.2.1. 连接到 MongoDB 数据库

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

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final MongoDatabaseFactory mongo;

    public MyBean(MongoDatabaseFactory mongo) {
        this.mongo = mongo;
    }

    public MongoCollection<Document> someMethod() {
        MongoDatabase db = this.mongo.getMongoDatabase();
        return db.getCollection("users");
    }

}

如果您已经定义了自己的 MongoClient ,那么它将用于自动配置合适的 MongoDatabaseFactory

自动配置的 MongoClient 是使用 MongoClientSettings bean 创建的。如果您定义了自己的 MongoClientSettings ,它将不加修改地使用,并且 spring.data.mongodb 属性将被忽略。否则 MongoClientSettings 将被自动配置并应用 spring.data.mongodb 属性。无论哪种情况,您都可以声明一个或多个 MongoClientSettingsBuilderCustomizer bean 来微调 MongoClientSettings 配置。MongoClientSettings.Builder 将按顺序调用它们,用于构建 MongoClientSettings

您可以设置 spring.data.mongodb.uri 属性来更改 URL 并配置其他设置,例如 replica set ,如以下示例所示:

spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test

或者,您可以使用分离的属性指定连接详细信息。例如,您可以在 application.properties 中声明以下设置:

spring.data.mongodb.host=mongoserver.example.com
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
spring.data.mongodb.username=user
spring.data.mongodb.password=secret

如果 spring.data.mongodb.port 未指定,则使用默认值 27017

如果您不使用 Spring Data Mongo ,则可以注入 com.mongodb.MongoClient bean 而不是使用 MongoDbFactory 。如果要完全控制建立 MongoDB 连接,则也可以声明自己的 MongoDbFactoryMongoClient bean

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

2.2.2. MongoTemplate

Spring Data MongoDB 提供的 MongoTemplate 类在设计上与 Spring 的 JdbcTemplate 非常相似。与 JdbcTemplate 一样,Spring Boot 为您自动配置一个 bean 来注入,如下所示:

import com.mongodb.client.MongoCollection;
import org.bson.Document;

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final MongoTemplate mongoTemplate;

    public MyBean(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public MongoCollection<Document> someMethod() {
        return this.mongoTemplate.getCollection("users");
    }

}

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

2.2.3. Spring Data MongoDB 存储库

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

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

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.Repository;

public interface CityRepository extends Repository<City, Long> {

    Page<City> findAll(Pageable pageable);

    City findByNameAndStateAllIgnoringCase(String name, String state);

}

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

有关 Spring Data MongoDB 的完整详细信息,包括其丰富的对象映射技术,请参阅其 参考文档

2.2.4. 嵌入式 Mongo

Spring Boot 为 Embedded Mongo 提供自动配置。要在您的 Spring Boot 应用程序中使用它,请添加 de.flapdoodle.embed:de.flapdoodle.embed.mongo 依赖并设置 spring.mongodb.embedded.version 属性以匹配应用程序将在生产中使用的 MongoDB 版本。

默认下载配置允许访问 Embedded Mongo Version 中列出的大多数版本以及其他一些版本。尝试下载服务器时,配置不可访问的版本将导致错误。可以通过定义适当配置的 DownloadConfigBuilderCustomizer bean 来纠正此类错误。

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

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

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

您可以声明自己的 IMongodConfigIRuntimeConfig bean 来控制 Mongo 实例的配置和日志记录路由。可以通过声明 DownloadConfigBuilderCustomizer bean 来自定义下载配置。

2.3. Neo4j

Neo4j 是一个开源 NoSQL 图形数据库,它使用通过一级关系连接的节点的丰富数据模型,与传统的 RDBMS 方法相比,它更适合于连接大数据。Spring Boot 为 Neo4j 的使用提供了许多便利,包括 spring-boot-starter-data-neo4j 启动器。

2.3.1. 连接到 Neo4j 数据库

要访问 Neo4j 服务器,您可以注入有关自动配置的 org.neo4j.driver.Driver 。默认情况下,实例尝试 localhost:7687 使用 Bolt 协议连接到 Neo4j 服务器。下面的示例演示了如何注入一个 Neo4j Driver ,允许您访问 Session :

import org.neo4j.driver.Driver;
import org.neo4j.driver.Session;
import org.neo4j.driver.Values;

import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final Driver driver;

    public MyBean(Driver driver) {
        this.driver = driver;
    }

    public String someMethod(String message) {
        try (Session session = this.driver.session()) {
            return session.writeTransaction((transaction) -> transaction
                    .run("CREATE (a:Greeting) SET a.message = $message RETURN a.message + ', from node ' + id(a)",
                            Values.parameters("message", message))
                    .single().get(0).asString());
        }
    }

}

您可以通过设置 spring.neo4j.* 属性来配置要驱动程序(driver),如以下示例所示:

spring.neo4j.uri=bolt://my-server:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=secret

自动配置的 Driver 是使用 ConfigBuilder 创建的。要微调其配置,请声明一个或多个 ConfigBuilderCustomizer bean 。每个都将被 ConfigBuilder 按顺序调用,用于构建 Driver

2.3.2. Spring Data Neo4j 存储库

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

Spring Data Neo4j 与许多其他 Spring Data 模块一样,与 Spring Data JPA 共享公共基础设施。您可以使用以前的 JPA 示例,并将 City 定义为 Spring Data Neo4j @Node 而不是 JPA @Entity ,并且存储库抽象以相同的方式工作,如以下示例所示:

import java.util.Optional;

import org.springframework.data.neo4j.repository.Neo4jRepository;

public interface CityRepository extends Neo4jRepository<City, Long> {

    Optional<City> findOneByNameAndState(String name, String state);

}

spring-boot-starter-data-neo4j 启动器启用对存储库的支持以及事务管理。Spring Boot 使用 Neo4jTemplateReactiveNeo4jTemplate bean 支持经典和响应式 Neo4j 存储库。当 Project Reactor 在类路径上可用时,响应式支持也会自动配置。

您可以通过在 @Configuration bean 上分别使用 @EnableNeo4jRepositories@EntityScan 来自定义查找存储库和实体的位置。

在使用响应式风格的应用程序中, ReactiveTransactionManager 不是自动配置的。要启用事务管理,必须在您的配置中定义以下 bean :

import org.neo4j.driver.Driver;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider;
import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager;

@Configuration(proxyBeanMethods = false)
public class MyNeo4jConfiguration {

    @Bean
    public ReactiveNeo4jTransactionManager reactiveTransactionManager(Driver driver,
            ReactiveDatabaseSelectionProvider databaseNameProvider) {
        return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);
    }

}

2.4. Solr

Apache Solr 是一个搜索引擎。Spring Boot 为 Solr 5 客户端库提供了基本的自动配置

2.4.1. 连接到 Solr

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

import java.io.IOException;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.SolrPingResponse;

import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final SolrClient solr;

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

    public SolrPingResponse someMethod() throws SolrServerException, IOException {
        return this.solr.ping("users");
    }

}

如果添加自己的 SolrClient @Bean ,它将替换默认值。

2.5. Elasticsearch

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

Spring Boot 支持多个客户端:

  • 官方 Java “Low Level” 和 “High Level” REST 客户端
  • Spring Data Elasticsearch 提供的 ReactiveElasticsearchClient

Spring Boot 提供了专用的 spring-boot-starter-data-elasticsearch 启动器。

2.5.1. 使用 REST 客户端连接到 Elasticsearch

Elasticsearch 提供了 两种不同的 REST 客户端,您可以使用它们来查询集群:“Low Level” 客户端和 “High Level” 客户端。Spring Boot 提供对 “High Level” 客户端的支持,org.elasticsearch.client:elasticsearch-rest-high-level-client 提供支持。此外,Spring Boot 提供了对基于 Spring Framework 的响应式客户端的支持,基于 Spring Framework 的 WebClientorg.springframework.data:spring-data-elasticsearch 提供支持。默认情况下,客户端连接 localhost:9200 。您可以使用 spring.elasticsearch.* 属性进一步调整客户端的配置方式,如下例所示:

spring.elasticsearch.uris=https://search.example.com:9200
spring.elasticsearch.socket-timeout=10s
spring.elasticsearch.username=user
spring.elasticsearch.password=secret
使用 RestHighLevelClient 连接到 Elasticsearch

如果类路径有 elasticsearch-rest-high-level-client 依赖,Spring Boot 将自动配置一个 RestHighLevelClient bean 。除了前面描述的属性之外,为了微调 RestHighLevelClient ,您可以注册任意数量的实现 RestClientBuilderCustomizer 的 bean 来进行更高级的自定义。要完全控制其注册,请定义一个 RestClientBuilder bean。

如果您的应用程序需要访问 “Low Level” RestClient ,您可以通过在自动配置的 RestHighLevelClient 上调用 client.getLowLevelClient()

此外,如果 elasticsearch-rest-client-sniffer 在类路径上,Sniffer 会自动配置为从正在运行的 Elasticsearch 集群中自动发现节点并将它们设置在 RestHighLevelClient bean 上。您可以进一步调整 Sniffer 配置,如以下示例所示:

spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
使用 ReactiveElasticsearchClient 连接到 Elasticsearch

Spring Data Elasticsearch 附带的 ReactiveElasticsearchClient 以响应方式查询 Elasticsearch 实例。它建立在 WebFlux 的 WebClient 基础上,因此 spring-boot-starter-elasticsearchspring-boot-starter-webflux 依赖项对于启用此支持都是有用的。

默认情况下,Spring Boot 将自动配置并注册一个ReactiveElasticsearchClient 。除了前面描述的属性之外,spring.elasticsearch.webclient.* 属性还可用于配置响应式特定设置,如以下示例所示:

spring.elasticsearch.webclient.max-in-memory-size=1MB

如果 spring.elasticsearch.spring.elasticsearch.webclient. 配置属性还不够,并且您想完全控制客户端配置,您可以注册一个自定义 ClientConfiguration bean

2.5.2. 使用 Spring Data 连接到 Elasticsearch

要连接到 Elasticsearch ,必须定义一个 RestHighLevelClient bean,它由 Spring Boot 自动配置或由应用程序手动提供(请参阅前面的部分)。有了此配置后,ElasticsearchRestTemplate 可以像其他任何Spring bean一样被注入 ,如以下示例所示:

import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final ElasticsearchRestTemplate template;

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

    public boolean someMethod(String id) {
        return this.template.exists(id, User.class);
    }

}

在存在 spring-data-elasticsearch 和使用 WebClient 所需依赖项(通常为 spring-boot-starter-webflux )的情况下,Spring Boot 还可以自动配置 ReactiveElasticsearchClientReactiveElasticsearchTemplateas bean 。它们与其他 REST 客户端是等效的。

2.5.3. Spring Data Elasticsearch存储库

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

实际上,Spring Data JPA 和 Spring Data Elasticsearch 共享相同的公共基础设施。您可以使用前面的 JPA 示例,假设现在 City 是Elasticsearch @Document 类而不是 JPA @Entity ,它的工作方式相同。

有关 Spring Data Elasticsearch 的完整详细信息,请参阅 参考文档

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

如果您希望使用自己的模板来支持 Elasticsearch 存储库,则可以添加自己的 ElasticsearchRestTemplateElasticsearchOperations @Bean(只要命名为 elasticsearchTemplate )。同样适用于 ReactiveElasticsearchTemplateReactiveElasticsearchOperations ,bean 名称为 reactiveElasticsearchTemplate

您可以选择使用以下属性禁用存储库支持:

spring.data.elasticsearch.repositories.enabled=false

2.6. Cassandra

Cassandra 是一个开源的分布式数据库管理系统,旨在处理许多商用服务器上的大量数据。Spring Boot 为 Cassandra 提供自动配置,并由 Spring Data Cassandra 在其之上提供抽象。spring-boot-starter-data-cassandra 启动器 可以方便地收集依赖关系。

2.6.1. 连接到 Cassandra

您可以像使用其他任何 Spring Bean 一样注入自动配置的 CassandraTemplate 实例或 Cassandra CqlSession 实例。spring.data.cassandra.* 属性可用于自定义连接。通常,您提供 keyspace-namecontact-points 属性还有本地数据中心名称,如以下示例所示:

spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1:9042,cassandrahost2:9042
spring.data.cassandra.local-datacenter=datacenter1

如果所有联系点的端口都相同,则可以使用快捷方式并仅指定主机名,如以下示例所示:

spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2
spring.data.cassandra.local-datacenter=datacenter1

这两个示例与默认端口 9042 相同。如果需要配置端口,请使用 spring.data.cassandra.port

Cassandra 驱动程序有自己的配置基础设施,在类路径的根目录加载一个 application.conf

Spring Boot 默认不查找这样的文件,但可以使用 spring.data.cassandra.config 加载一个。如果属性同时存在于 spring.data.cassandra.* 和配置文件中,spring.data.cassandra.* 优先。

对于更高级的驱动程序自定义,您可以注册任意数量的实现 DriverConfigLoaderBuilderCustomizer 的 bean 。CqlSession 可以使用 CqlSessionBuilderCustomizer 类型的 bean 进行定制。

如果您使用 CqlSessionBuilder 创建多个 CqlSession bean ,请记住构建器是可变的,因此请确保为每个会话注入一个新副本

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

import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final CassandraTemplate template;

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

    public long someMethod() {
        return this.template.count(User.class);
    }

}

如果添加自己的 CassandraTemplate @Bean ,它将替换默认值。

2.6.2. Spring Data Cassandra 存储库

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

2.7. Couchbase

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

2.7.1. 连接到 Couchbase

您可以通过添加 Couchbase SDK 和一些配置来获得 Clusterspring.couchbase.* 属性可用于自定义连接。通常,您提供 连接字符串 、用户名和密码,如下例所示:

spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.username=user
spring.couchbase.password=secret

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

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

检查 spring.couchbase.env.* 属性以获取更多详细信息。要进行更多控制,可以使用一个或多个 ClusterEnvironmentBuilderCustomizer bean

2.7.2. Spring Data Couchbase 存储库

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

您可以像使用任何其他 Spring Bean 一样注入自动配置的 CouchbaseTemplate 实例,前提是 CouchbaseConfigurer bean 可用。当 Couchbase 可用,并且已指定存储桶名称时:

spring.data.couchbase.bucket-name=my-bucket

以下示例显示了如何注入 CouchbaseTemplate bean

import org.springframework.data.couchbase.core.CouchbaseTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final CouchbaseTemplate template;

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

    public String someMethod() {
        return this.template.getBucketName();
    }

}

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

  • 名称为 couchbaseMappingContextCouchbaseMappingContext @Bean
  • 名称为 couchbaseTemplateCouchbaseTemplate @Bean
  • 名称为 couchbaseCustomConversionsCustomConversions @Bean

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

import org.assertj.core.util.Arrays;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.couchbase.config.BeanNames;
import org.springframework.data.couchbase.core.convert.CouchbaseCustomConversions;

@Configuration(proxyBeanMethods = false)
public class MyCouchbaseConfiguration {

    @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
    public CouchbaseCustomConversions myCustomConversions() {
        return new CouchbaseCustomConversions(Arrays.asList(new MyConverter()));
    }

}

2.8. LDAP

LDAP(轻量级目录访问协议)是一种开放的,与供应商无关的行业标准应用协议,用于通过 IP 网络访问和维护分布式目录信息服务。Spring Boot 为任何兼容的 LDAP 服务器提供自动配置,并使用 UnboundID 支持嵌入式内存 LDAP 服务器。

LDAP 抽象由 Spring Data LDAP 提供。spring-boot-starter-data-ldap 启动器 可以方便地收集依赖关系。

2.8.1. 连接到 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 将根据这些设置自动配置。如果 DirContextAuthenticationStrategy bean 可用,则它与自动配置的 LdapContextSource 相关联。如果您需要自定义它,例如使用 PooledContextSource ,您仍然可以注入自动配置的 LdapContextSource 。确保将您的自定义 ContextSource 标记为 @Primary 以便自动配置的 LdapTemplate 使用它。

如果您需要对其进行自定义(例如为了使用 PooledContextSource ),则仍可以注入自动配置的 LdapContextSource 。确保将您的定制ContextSource标记为@Primary,以便自动配置的LdapTemplate使用它。

2.8.2. Spring Data LDAP存 储库

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

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

import java.util.List;

import org.springframework.ldap.core.LdapTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final LdapTemplate template;

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

    public List<User> someMethod() {
        return this.template.findAll(User.class);
    }

}

2.8.3. 嵌入式内存 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 文件中,您可以使用 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 来定义自定义属性类型或对象类。

2.9. InfluxDB

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

2.9.1. 连接到 InfluxDB

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

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

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

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

如果您需要对配置进行更多控制,请考虑注册一个 InfluxDbCustomizer bean

posted @ 2022-06-08 07:57  流星<。)#)))≦  阅读(45)  评论(0编辑  收藏  举报