此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.4.0! |
使用 NoSQL 技术
Spring Data 提供了其他项目,可帮助您访问各种 NoSQL 技术,包括:
其中,Spring Boot 为 Cassandra、Couchbase、Elasticsearch、LDAP、MongoDB、Neo4J 和 Redis 提供了自动配置。 此外,Spring Boot for Apache Geode 还提供 Apache Geode 的自动配置。 您可以使用其他项目,但必须自己配置它们。 请参阅 spring.io/projects/spring-data 中的相应参考文档。
Spring Boot 还为 InfluxDB 客户端提供了自动配置,但它已被弃用,取而代之的是提供自己的 Spring Boot 集成的新 InfluxDB Java 客户端。
Redis
Redis 是一个缓存、消息代理和功能丰富的键值存储。 Spring Boot 为 Lettuce 和 Jedis 客户端库以及 Spring Data Redis 提供的抽象提供了基本的自动配置。
有一个 starter 可以方便地收集依赖项。
默认情况下,它使用 Lettuce。
该Starters可以处理传统和响应式应用程序。spring-boot-starter-data-redis
我们还提供了一个 starter,以便与其他具有反应式支持的 store 保持一致。spring-boot-starter-data-redis-reactive |
连接到 Redis
您可以像注入任何其他 Spring Bean 一样注入自动配置的 RedisConnectionFactory
、StringRedisTemplate
或原版 RedisTemplate
实例。
下面的清单显示了这种 bean 的一个示例:
-
Java
-
Kotlin
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");
}
}
import org.springframework.data.redis.core.StringRedisTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: StringRedisTemplate) {
// ...
fun someMethod(): Boolean {
return template.hasKey("spring")
}
}
默认情况下,实例尝试连接到 位于 的 Redis 服务器。
您可以使用 properties 指定自定义连接详细信息,如以下示例所示:localhost:6379
spring.data.redis.*
-
Properties
-
YAML
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.database=0
spring.data.redis.username=user
spring.data.redis.password=secret
spring:
data:
redis:
host: "localhost"
port: 6379
database: 0
username: "user"
password: "secret"
您也可以直接指定 Redis 服务器的 url。 设置 url 时,将忽略 host、port、username 和 password 属性。 以下示例显示了这一点:
-
Properties
-
YAML
spring.data.redis.url=redis://user:secret@localhost:6379
spring.data.redis.database=0
spring:
data:
redis:
url: "redis://user:secret@localhost:6379"
database: 0
您还可以注册任意数量的 bean 来实现 LettuceClientConfigurationBuilderCustomizer 以进行更高级的自定义。还可以使用 ClientResourcesBuilderCustomizer 自定义 ClientResources 。
如果您使用 Jedis,则也可以使用 JedisClientConfigurationBuilderCustomizer 。
或者,您可以注册 RedisStandaloneConfiguration 、RedisSentinelConfiguration 或 RedisClusterConfiguration 类型的 Bean 以完全控制配置。 |
如果您添加任何自动配置类型的@Bean
,它将替换默认值(除了 RedisTemplate
的情况,当排除基于 bean 名称而不是其类型时)。redisTemplate
默认情况下,如果池连接工厂在 Classpath 上,则会自动配置。commons-pool2
通过设置属性,可以将自动配置的 RedisConnectionFactory
配置为使用 SSL 与服务器通信,如下例所示:
-
Properties
-
YAML
spring.data.redis.ssl.enabled=true
spring:
data:
redis:
ssl:
enabled: true
可以在 SSL 捆绑包中配置自定义 SSL 信任材料,并将其应用于 RedisConnectionFactory
,如以下示例所示:
-
Properties
-
YAML
spring.data.redis.ssl.bundle=example
spring:
data:
redis:
ssl:
bundle: "example"
MongoDB 数据库
MongoDB 是一个开源 NoSQL 文档数据库,它使用类似 JSON 的架构,而不是传统的基于表的关系数据。
Spring Boot 为使用 MongoDB 提供了多种便利,包括 starters。spring-boot-starter-data-mongodb
spring-boot-starter-data-mongodb-reactive
连接到 MongoDB 数据库
要访问 MongoDB 数据库,您可以注入自动配置的 MongoDatabaseFactory
。
默认情况下,实例尝试连接到 位于 的 MongoDB 服务器。
以下示例显示如何连接到 MongoDB 数据库:mongodb://localhost/test
-
Java
-
Kotlin
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");
}
}
import com.mongodb.client.MongoCollection
import org.bson.Document
import org.springframework.data.mongodb.MongoDatabaseFactory
import org.springframework.stereotype.Component
@Component
class MyBean(private val mongo: MongoDatabaseFactory) {
// ...
fun someMethod(): MongoCollection<Document> {
val db = mongo.mongoDatabase
return db.getCollection("users")
}
}
如果您定义了自己的 MongoClient
,它将用于自动配置合适的 MongoDatabaseFactory
。
自动配置的 MongoClient
是使用 MongoClientSettings
bean 创建的。
如果您定义了自己的 MongoClientSettings
,则无需修改即可使用它,并且将忽略属性。
否则,将自动配置 MongoClientSettings
并应用属性。
在任何一种情况下,你都可以声明一个或多个MongoClientSettingsBuilderCustomizer
bean 来微调MongoClientSettings
配置。
每个都将使用用于构建 MongoClientSettings
的 MongoClientSettings.Builder
按顺序调用。spring.data.mongodb
spring.data.mongodb
您可以设置该属性以更改 URL 并配置其他设置,例如副本集,如以下示例所示:spring.data.mongodb.uri
-
Properties
-
YAML
spring.data.mongodb.uri=mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test
spring:
data:
mongodb:
uri: "mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test"
或者,您可以使用 discrete 属性指定连接详细信息。
例如,您可以在 :application.properties
-
Properties
-
YAML
spring.data.mongodb.host=mongoserver1.example.com
spring.data.mongodb.port=27017
spring.data.mongodb.additional-hosts[0]=mongoserver2.example.com:23456
spring.data.mongodb.database=test
spring.data.mongodb.username=user
spring.data.mongodb.password=secret
spring:
data:
mongodb:
host: "mongoserver1.example.com"
port: 27017
additional-hosts:
- "mongoserver2.example.com:23456"
database: "test"
username: "user"
password: "secret"
通过设置属性,可以将自动配置的 MongoClient
配置为使用 SSL 与服务器通信,如下例所示:
-
Properties
-
YAML
spring.data.mongodb.uri=mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test
spring.data.mongodb.ssl.enabled=true
spring:
data:
mongodb:
uri: "mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test"
ssl:
enabled: true
自定义 SSL 信任材料可以在 SSL 捆绑包中配置并应用于 MongoClient
,如以下示例所示:
-
Properties
-
YAML
spring.data.mongodb.uri=mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test
spring.data.mongodb.ssl.bundle=example
spring:
data:
mongodb:
uri: "mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test"
ssl:
bundle: "example"
如果未指定,则使用默认值 of。
您可以从前面显示的示例中删除此行。 您还可以使用语法将端口指定为主机地址的一部分。
如果需要更改条目的端口,则应使用此格式。 |
如果不使用 Spring Data MongoDB,则可以注入 MongoClient bean 而不是使用 MongoDatabaseFactory 。
如果要完全控制建立 MongoDB 连接,还可以声明自己的 MongoDatabaseFactory 或 MongoClient bean。 |
如果您使用的是反应式驱动程序,则 SSL 需要 Netty。 如果 Netty 可用并且要使用的工厂尚未自定义,则自动配置会自动配置此工厂。 |
MongoTemplate
Spring Data MongoDB 提供了一个 MongoTemplate
类,该类在设计上与 Spring 的 JdbcTemplate
非常相似。
与JdbcTemplate
一样, Spring Boot 会自动配置一个 bean 供你注入模板,如下所示:
-
Java
-
Kotlin
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");
}
}
import com.mongodb.client.MongoCollection
import org.bson.Document
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val mongoTemplate: MongoTemplate) {
// ...
fun someMethod(): MongoCollection<Document> {
return mongoTemplate.getCollection("users")
}
}
有关完整详细信息,请参阅 MongoOperations
API 文档。
Spring Data MongoDB 存储库
Spring Data 包括对 MongoDB 的存储库支持。 与前面讨论的 JPA 存储库一样,基本原则是查询是根据方法名称自动构造的。
事实上,Spring Data JPA 和 Spring Data MongoDB 共享相同的通用基础设施。
您可以采用前面的 JPA 示例,假设它现在是 MongoDB 数据类而不是 JPA @Entity
,它的工作方式相同,如以下示例所示:City
-
Java
-
Kotlin
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);
}
import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable
import org.springframework.data.repository.Repository
interface CityRepository :
Repository<City?, Long?> {
fun findAll(pageable: Pageable?): Page<City?>?
fun findByNameAndStateAllIgnoringCase(name: String?, state: String?): City?
}
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 @EnableMongoRepositories
和 @EntityScan
自定义位置以查找存储库和文档。
有关 Spring Data MongoDB 的完整详细信息,包括其丰富的对象映射技术,请参阅其参考文档。 |
Neo4j
Neo4j 是一个开源的 NoSQL 图形数据库,它使用由第一类关系连接的节点的丰富数据模型,与传统的 RDBMS 方法相比,它更适合连接的大数据。
Spring Boot 为使用 Neo4j 提供了多种便利,包括Starters。spring-boot-starter-data-neo4j
连接到 Neo4j 数据库
要访问 Neo4j 服务器,您可以注入自动配置的 Driver
。
默认情况下,实例尝试使用 Bolt 协议连接到 Neo4j 服务器。
下面的示例展示了如何注入一个 Neo4j Driver
,它允许你访问 Session
:localhost:7687
-
Java
-
Kotlin
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.executeWrite(
(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());
}
}
}
import org.neo4j.driver.*
import org.springframework.stereotype.Component
@Component
class MyBean(private val driver: Driver) {
// ...
fun someMethod(message: String?): String {
driver.session().use { session ->
return@someMethod session.executeWrite { transaction: TransactionContext ->
transaction
.run(
"CREATE (a:Greeting) SET a.message = \$message RETURN a.message + ', from node ' + id(a)",
Values.parameters("message", message)
)
.single()[0].asString()
}
}
}
}
您可以使用属性配置驱动程序的各个方面。
以下示例显示如何配置要使用的 uri 和凭证:spring.neo4j.*
-
Properties
-
YAML
spring.neo4j.uri=bolt://my-server:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=secret
spring:
neo4j:
uri: "bolt://my-server:7687"
authentication:
username: "neo4j"
password: "secret"
自动配置的驱动程序
是使用 创建的。
要微调其配置,请声明一个或多个ConfigBuilderCustomizer
bean。
每个 都将按顺序调用,用于构建 Driver
。org.neo4j.driver.Config$ConfigBuilder
org.neo4j.driver.Config$ConfigBuilder
Spring Data Neo4j 存储库
Spring Data 包括对 Neo4j 的存储库支持。 有关 Spring Data Neo4j 的完整详细信息,请参阅参考文档。
与许多其他 Spring Data 模块一样,Spring Data Neo4j 与 Spring Data JPA 共享公共基础设施。
你可以采用前面的 JPA 示例,并将其定义为 Spring Data Neo4j @Node
而不是 JPA @Entity
,并且存储库抽象以相同的方式工作,如以下示例所示:City
-
Java
-
Kotlin
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);
}
import org.springframework.data.neo4j.repository.Neo4jRepository
import java.util.Optional
interface CityRepository : Neo4jRepository<City?, Long?> {
fun findOneByNameAndState(name: String?, state: String?): Optional<City?>?
}
Starter 支持存储库支持以及事务管理。
Spring Boot 使用 Neo4jTemplate
或 ReactiveNeo4jTemplate
bean 支持经典和反应式 Neo4j 存储库。
当 Project Reactor 在 Classpath 上可用时,反应式样式也会自动配置。spring-boot-starter-data-neo4j
通过扫描找到存储库和实体。
默认情况下,将扫描自动配置包。
您可以分别使用 @EnableNeo4jRepositories
和 @EntityScan
自定义位置以查找存储库和实体。
在使用反应式风格的应用程序中,
|
Elasticsearch
Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎。 Spring Boot 为 Elasticsearch 客户端提供了基本的自动配置。
Spring Boot 支持多个客户端:
-
官方的低级 REST 客户端
-
官方 Java API 客户端
-
Spring Data Elasticsearch 提供的
ReactiveElasticsearchClient
Spring Boot 提供了一个专用的Starters .spring-boot-starter-data-elasticsearch
使用 REST 客户端连接到 Elasticsearch
Elasticsearch 提供了两个不同的 REST 客户端,您可以使用它们来查询集群:模块中的低级客户端和模块中的 Java API 客户端。
此外, Spring Boot 还为来自模块的反应式 Client 端提供支持。
默认情况下,客户端将以 为目标。
您可以使用 properties 来进一步调整客户端的配置方式,如以下示例所示:org.elasticsearch.client:elasticsearch-rest-client
co.elastic.clients:elasticsearch-java
org.springframework.data:spring-data-elasticsearch
localhost:9200
spring.elasticsearch.*
-
Properties
-
YAML
spring.elasticsearch.uris=https://search.example.com:9200
spring.elasticsearch.socket-timeout=10s
spring.elasticsearch.username=user
spring.elasticsearch.password=secret
spring:
elasticsearch:
uris: "https://search.example.com:9200"
socket-timeout: "10s"
username: "user"
password: "secret"
使用 RestClient 连接到 Elasticsearch
如果你在 Classpath 上,Spring Boot 将自动配置并注册一个 RestClient
bean。
除了前面描述的属性之外,要微调RestClient
,你可以注册任意数量的 bean 来实现RestClientBuilderCustomizer
,以进行更高级的自定义。
要完全控制客户端的配置,请定义一个 RestClientBuilder
Bean。elasticsearch-rest-client
此外,如果位于 Classpath 上,则会自动配置 Sniffer
以从正在运行的 Elasticsearch 集群中自动发现节点,并在 RestClient
bean 上设置它们。
您可以进一步调整 Sniffer
的配置方式,如以下示例所示:elasticsearch-rest-client-sniffer
-
Properties
-
YAML
spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
spring:
elasticsearch:
restclient:
sniffer:
interval: "10m"
delay-after-failure: "30s"
使用 ElasticsearchClient 连接到 Elasticsearch
如果你在 Classpath 上,Spring Boot 将自动配置并注册一个 ElasticsearchClient
bean。co.elastic.clients:elasticsearch-java
ElasticsearchClient
使用依赖于前面描述的 RestClient
的传输。
因此,前面描述的属性可用于配置 ElasticsearchClient
。
此外,你可以定义一个 RestClientOptions
bean 来进一步控制传输的行为。
使用 ReactiveElasticsearchClient 连接到 Elasticsearch
Spring Data Elasticsearch 附带ReactiveElasticsearchClient
,用于以反应方式查询 Elasticsearch 实例。
如果你在 Classpath 上有 Spring Data Elasticsearch 和 Reactor,则 Spring Boot 将自动配置并注册ReactiveElasticsearchClient
。
ReactiveElasticsearchClient
使用依赖于前面描述的 RestClient
的传输。
因此,前面描述的属性可用于配置 ReactiveElasticsearchClient
。
此外,你可以定义一个 RestClientOptions
bean 来进一步控制传输的行为。
使用 Spring Data 连接到 Elasticsearch
要连接到 Elasticsearch,必须定义一个 ElasticsearchClient
Bean,
由 Spring Boot 自动配置或由应用程序手动提供(请参阅前面的部分)。
有了这个配置,就可以像任何其他 Spring bean 一样注入 ElasticsearchTemplate
,
如以下示例所示:
-
Java
-
Kotlin
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
private final ElasticsearchTemplate template;
public MyBean(ElasticsearchTemplate template) {
this.template = template;
}
// ...
public boolean someMethod(String id) {
return this.template.exists(id, User.class);
}
}
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate ) {
// ...
fun someMethod(id: String): Boolean {
return template.exists(id, User::class.java)
}
}
在存在 和 Reactor 的情况下, Spring Boot 还可以将ReactiveElasticsearchClient
和ReactiveElasticsearchTemplate
自动配置为 bean。
它们是其他 REST 客户端的反应式等效项。spring-data-elasticsearch
Spring Data Elasticsearch 存储库
Spring Data 包括对 Elasticsearch 的存储库支持。 与前面讨论的 JPA 存储库一样,基本原则是根据方法名称自动为您构建查询。
事实上,Spring Data JPA 和 Spring Data Elasticsearch 共享相同的通用基础架构。
您可以采用前面的 JPA 示例,假设它现在是 Elasticsearch @Document
类而不是 JPA @Entity
,它的工作方式相同。City
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 @EnableElasticsearchRepositories
和 @EntityScan
自定义位置以查找存储库和文档。
有关 Spring Data Elasticsearch 的完整详细信息,请参阅参考文档。 |
Spring Boot 使用ElasticsearchTemplate
或ReactiveElasticsearchTemplate
bean 支持经典和反应式 Elasticsearch 存储库。
如果存在所需的依赖项,这些 bean 很可能是由 Spring Boot 自动配置的。
如果您希望使用自己的模板来支持 Elasticsearch 存储库,您可以添加自己的 ElasticsearchTemplate
或 ElasticsearchOperations
@Bean
,只要它名为 .
这同样适用于 ReactiveElasticsearchTemplate
和 ReactiveElasticsearchOperations
,其 bean 名称为 。"elasticsearchTemplate"
"reactiveElasticsearchTemplate"
您可以选择使用以下属性禁用存储库支持:
-
Properties
-
YAML
spring.data.elasticsearch.repositories.enabled=false
spring:
data:
elasticsearch:
repositories:
enabled: false
Cassandra
Cassandra 是一个开源的分布式数据库管理系统,旨在处理跨许多商用服务器的大量数据。
Spring Boot 为 Cassandra 提供了自动配置,以及 Spring Data Cassandra 提供的抽象。
有一个 starter 可以方便地收集依赖项。spring-boot-starter-data-cassandra
连接到 Cassandra
您可以像注入任何其他 Spring Bean 一样注入自动配置的CassandraTemplate
或Cassandra实例。
这些属性可用于自定义连接。
通常,您需要提供 和 local datacenter 名称,如以下示例所示:CqlSession
spring.cassandra.*
keyspace-name
contact-points
-
Properties
-
YAML
spring.cassandra.keyspace-name=mykeyspace
spring.cassandra.contact-points=cassandrahost1:9042,cassandrahost2:9042
spring.cassandra.local-datacenter=datacenter1
spring:
cassandra:
keyspace-name: "mykeyspace"
contact-points: "cassandrahost1:9042,cassandrahost2:9042"
local-datacenter: "datacenter1"
如果所有联系点的端口都相同,则可以使用快捷方式,并且仅指定主机名,如以下示例所示:
-
Properties
-
YAML
spring.cassandra.keyspace-name=mykeyspace
spring.cassandra.contact-points=cassandrahost1,cassandrahost2
spring.cassandra.local-datacenter=datacenter1
spring:
cassandra:
keyspace-name: "mykeyspace"
contact-points: "cassandrahost1,cassandrahost2"
local-datacenter: "datacenter1"
这两个示例与默认为 的端口相同。
如果需要配置端口,请使用 。9042 spring.cassandra.port |
通过设置以下示例所示的属性,可以将自动配置的配置为使用 SSL 与服务器通信:CqlSession
-
Properties
-
YAML
spring.cassandra.keyspace-name=mykeyspace
spring.cassandra.contact-points=cassandrahost1,cassandrahost2
spring.cassandra.local-datacenter=datacenter1
spring.cassandra.ssl.enabled=true
spring:
cassandra:
keyspace-name: "mykeyspace"
contact-points: "cassandrahost1,cassandrahost2"
local-datacenter: "datacenter1"
ssl:
enabled: true
自定义 SSL 信任材料可以在 SSL 捆绑包中配置并应用于 ,如以下示例所示:CqlSession
-
Properties
-
YAML
spring.cassandra.keyspace-name=mykeyspace
spring.cassandra.contact-points=cassandrahost1,cassandrahost2
spring.cassandra.local-datacenter=datacenter1
spring.cassandra.ssl.bundle=example
spring:
cassandra:
keyspace-name: "mykeyspace"
contact-points: "cassandrahost1,cassandrahost2"
local-datacenter: "datacenter1"
ssl:
bundle: "example"
Cassandra 驱动程序有自己的配置基础结构,该基础结构在 Classpath 的根目录中加载 。 默认情况下,Spring Boot 不会查找此类文件,但可以使用 .
如果配置文件中同时存在属性,则值 in 优先。 对于更高级的驱动程序自定义,你可以注册任意数量的实现 |
如果你用来创建多个 bean,请记住 builder 是可变的,所以确保为每个会话注入一个新的副本。CqlSessionBuilder CqlSession |
下面的代码清单显示了如何注入 Cassandra bean:
-
Java
-
Kotlin
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);
}
}
import org.springframework.data.cassandra.core.CassandraTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: CassandraTemplate) {
// ...
fun someMethod(): Long {
return template.count(User::class.java)
}
}
如果您添加自己的 CassandraTemplate
类型的@Bean
,它将替换默认值。
Spring Data Cassandra 存储库
Spring Data 包括对 Cassandra 的基本存储库支持。
目前,这比前面讨论的 JPA 存储库更有限,需要@Query
带注释的 finder 方法。
通过扫描找到存储库和实体。
默认情况下,将扫描自动配置包。
您可以分别使用 @EnableCassandraRepositories
和 @EntityScan
自定义位置以查找存储库和实体。
有关 Spring Data Cassandra 的完整详细信息,请参阅参考文档。 |
Couchbase
Couchbase 是一个开源、分布式、多模型、面向文档的 NoSQL 数据库,针对交互式应用程序进行了优化。
Spring Boot 为 Couchbase 提供了自动配置,并且 Spring Data Couchbase 提供了它之上的抽象。
有 和 starters 用于以方便的方式收集依赖项。spring-boot-starter-data-couchbase
spring-boot-starter-data-couchbase-reactive
连接到 Couchbase
您可以通过添加 Couchbase SDK 和一些配置来获取 Cluster
。
这些属性可用于自定义连接。
通常,您需要提供连接字符串、用户名和密码,如以下示例所示:spring.couchbase.*
-
Properties
-
YAML
spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.username=user
spring.couchbase.password=secret
spring:
couchbase:
connection-string: "couchbase://192.168.1.123"
username: "user"
password: "secret"
还可以自定义某些 ClusterEnvironment
设置。
例如,以下配置更改了打开新 Bucket
的超时时间,并通过引用已配置的 SSL 捆绑包来启用 SSL 支持:
-
Properties
-
YAML
spring.couchbase.env.timeouts.connect=3s
spring.couchbase.env.ssl.bundle=example
spring:
couchbase:
env:
timeouts:
connect: "3s"
ssl:
bundle: "example"
检查属性以了解更多详细信息。
要获得更多控制,可以使用一个或多个ClusterEnvironmentBuilderCustomizer bean。spring.couchbase.env.* |
Spring Data Couchbase 存储库
Spring Data 包括对 Couchbase 的存储库支持。
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 @EnableCouchbaseRepositories
和 @EntityScan
自定义位置以查找存储库和文档。
有关 Spring Data Couchbase 的完整详细信息,请参阅参考文档。
你可以像使用任何其他 Spring Bean 一样注入自动配置的CouchbaseTemplate
实例,前提是CouchbaseClientFactory
Bean 可用。
如上所述,当 Cluster
可用并且已指定存储桶名称时,会发生这种情况:
-
Properties
-
YAML
spring.data.couchbase.bucket-name=my-bucket
spring:
data:
couchbase:
bucket-name: "my-bucket"
下面的示例展示了如何注入CouchbaseTemplate
bean:
-
Java
-
Kotlin
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();
}
}
import org.springframework.data.couchbase.core.CouchbaseTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: CouchbaseTemplate) {
// ...
fun someMethod(): String {
return template.bucketName
}
}
您可以在自己的配置中定义一些 bean 来覆盖 auto-configuration 提供的 bean:
为了避免在你自己的配置中对这些名称进行硬编码,你可以重用 Spring Data Couchbase 提供的 BeanName
。
例如,您可以自定义要使用的转换器,如下所示:
-
Java
-
Kotlin
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()));
}
}
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)
class MyCouchbaseConfiguration {
@Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
fun myCustomConversions(): CouchbaseCustomConversions {
return CouchbaseCustomConversions(Arrays.asList(MyConverter()))
}
}
LDAP 协议
LDAP(轻量级目录访问协议)是一种开放的、供应商中立的行业标准应用协议,用于通过 IP 网络访问和维护分布式目录信息服务。 Spring Boot 为任何兼容的 LDAP 服务器提供自动配置,并支持来自 UnboundID 的嵌入式内存 LDAP 服务器。
LDAP 抽象由 Spring Data LDAP 提供。
有一个 starter 可以方便地收集依赖项。spring-boot-starter-data-ldap
连接到 LDAP 服务器
要连接到 LDAP 服务器,请确保在 starter 上声明依赖项,或者在 application.properties 中声明服务器的 URL,如以下示例所示:spring-boot-starter-data-ldap
spring-ldap-core
-
Properties
-
YAML
spring.ldap.urls=ldap://myserver:1235
spring.ldap.username=admin
spring.ldap.password=secret
spring:
ldap:
urls: "ldap://myserver:1235"
username: "admin"
password: "secret"
如果需要自定义连接设置,可以使用 和 属性。spring.ldap.base
spring.ldap.base-environment
LdapContextSource
是根据这些设置自动配置的。
如果DirContextAuthenticationStrategy
bean 可用,则它与自动配置的LdapContextSource
相关联。
如果你需要自定义它,例如要使用PooledContextSource
,你仍然可以注入自动配置的LdapContextSource
。
确保将自定义的ContextSource
标记为@Primary
以便自动配置的LdapTemplate
使用它。
Spring Data LDAP 存储库
Spring Data 包括对 LDAP 的存储库支持。
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 @EnableLdapRepositories
和 @EntityScan
自定义位置以查找存储库和文档。
有关 Spring Data LDAP 的完整详细信息,请参阅参考文档。 |
你也可以像使用任何其他 Spring Bean 一样注入自动配置的LdapTemplate
实例,如以下示例所示:
-
Java
-
Kotlin
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);
}
}
import org.springframework.ldap.core.LdapTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: LdapTemplate) {
// ...
fun someMethod(): List<User> {
return template.findAll(User::class.java)
}
}
嵌入式内存 LDAP 服务器
出于测试目的, Spring Boot 支持从 UnboundID 自动配置内存中的 LDAP 服务器。
要配置服务器,请添加依赖项并声明属性,如下所示:com.unboundid:unboundid-ldapsdk
spring.ldap.embedded.base-dn
-
Properties
-
YAML
spring.ldap.embedded.base-dn=dc=spring,dc=io
spring:
ldap:
embedded:
base-dn: "dc=spring,dc=io"
可以定义多个 base-dn 值,但是,由于专有名称通常包含逗号,因此必须使用正确的表示法来定义它们。 在 yaml 文件中,您可以使用 yaml 列表表示法。在属性文件中,必须将索引作为属性名称的一部分包含在内:
|
默认情况下,服务器在随机端口上启动并触发常规 LDAP 支持。
无需指定属性。spring.ldap.urls
如果您的 Classpath 上有一个文件,则使用它来初始化服务器。
如果要从其他资源加载初始化脚本,还可以使用 property .schema.ldif
spring.ldap.embedded.ldif
默认情况下,使用标准架构来验证文件。
您可以通过设置该属性来完全关闭验证。
如果您有自定义属性,则可以使用 来定义自定义属性类型或对象类。LDIF
spring.ldap.embedded.validation.enabled
spring.ldap.embedded.validation.schema
InfluxDB 数据库
InfluxDB 的自动配置已弃用,并计划在 Spring Boot 3.4 中删除,以支持提供自己的 Spring Boot 集成的新 InfluxDB Java 客户端。 |
InfluxDB 是一个开源时间序列数据库,针对操作监控、应用程序指标、物联网传感器数据和实时分析等领域的时间序列数据的快速、高可用性存储和检索进行了优化。
连接到 InfluxDB
Spring Boot 会自动配置 InfluxDB
实例,前提是客户端位于 Classpath 上,并且数据库的 URL 是使用 .influxdb-java
spring.influx.url
如果与 InfluxDB 的连接需要用户和密码,您可以相应地设置 and 属性。spring.influx.user
spring.influx.password
InfluxDB 依赖于 OkHttp。
如果需要调整 InfluxDB
在后台使用的 http 客户端,可以注册 InfluxDbOkHttpClientBuilderProvider
Bean。
如果需要对配置进行更多控制,请考虑注册 InfluxDbCustomizer
Bean。