使用 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 客户端提供了自動組態,但由於 新的 InfluxDB Java 客户端 提供了自己的 Spring Boot 整合,因此已被棄用。
Redis
Redis 是一種快取、訊息代理和功能豐富的鍵值儲存庫。Spring Boot 為 Lettuce 和 Jedis 客户端程式庫,以及 Spring Data Redis 提供的基於它們之上的抽象層提供了基本的自動組態。
有一個 spring-boot-starter-data-redis
Starter 可以方便地收集依賴項。預設情況下,它使用 Lettuce。該 Starter 同時處理傳統和反應式應用程式。
我們也提供了一個 spring-boot-starter-data-redis-reactive Starter,以與其他具有反應式支援的儲存庫保持一致性。 |
連線到 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")
}
}
預設情況下,該實例嘗試連線到位於 localhost:6379
的 Redis 伺服器。您可以使用 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 時,主機、埠號、使用者名稱和密碼屬性將被忽略。以下範例顯示了這一點
-
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,這些 Bean 實作了 LettuceClientConfigurationBuilderCustomizer 以進行更進階的自訂。ClientResources 也可以使用 ClientResourcesBuilderCustomizer 進行自訂。如果您使用 Jedis,則 JedisClientConfigurationBuilderCustomizer 也可用。或者,您可以註冊類型為 RedisStandaloneConfiguration 、RedisSentinelConfiguration 或 RedisClusterConfiguration 的 Bean,以完全控制組態。 |
如果您新增任何自動組態類型的 @Bean
,它將取代預設值(RedisTemplate
除外,在這種情況下,排除是基於 Bean 名稱 redisTemplate
,而不是其類型)。
預設情況下,如果 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 提供了多種便利,包括 spring-boot-starter-data-mongodb
和 spring-boot-starter-data-mongodb-reactive
Starter。
連線到 MongoDB 資料庫
要存取 MongoDB 資料庫,您可以注入自動組態的 org.springframework.data.mongodb.MongoDatabaseFactory
。預設情況下,該實例嘗試連線到位於 mongodb://127.0.0.1/test
的 MongoDB 伺服器。以下範例顯示如何連線到 MongoDB 資料庫
-
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
,它將在不修改的情況下使用,並且 spring.data.mongodb
屬性將被忽略。否則,將自動組態 MongoClientSettings
,並將 spring.data.mongodb
屬性應用於它。在任何一種情況下,您都可以宣告一個或多個 MongoClientSettingsBuilderCustomizer
Bean,以微調 MongoClientSettings
組態。每個 Bean 將按順序使用用於建置 MongoClientSettings
的 MongoClientSettings.Builder
呼叫。
您可以設定 spring.data.mongodb.uri
屬性來變更 URL 並組態其他設定,例如副本集,如下例所示
-
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"
或者,您可以使用離散屬性指定連線詳細資訊。例如,您可以在 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"
如果未指定 您也可以使用 |
如果您不使用 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 範例,並假設 City
現在是一個 MongoDB 資料類別,而不是 JPA @Entity
,它以相同的方式運作,如下例所示
-
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 提供了多種便利,包括 spring-boot-starter-data-neo4j
Starter。
連線到 Neo4j 資料庫
要存取 Neo4j 伺服器,您可以注入自動組態的 org.neo4j.driver.Driver
。預設情況下,該實例嘗試使用 Bolt 協定連線到位於 localhost:7687
的 Neo4j 伺服器。以下範例顯示如何注入 Neo4j Driver
,讓您可以存取 Session
等物件
-
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()
}
}
}
}
您可以使用 spring.neo4j.*
屬性組態驅動程式的各個方面。以下範例顯示如何組態要使用的 URI 和憑證
-
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"
自動組態的 Driver
是使用 ConfigBuilder
建立的。要微調其組態,請宣告一個或多個 ConfigBuilderCustomizer
Bean。每個 Bean 將按順序使用用於建置 Driver
的 ConfigBuilder
呼叫。
Spring Data Neo4j 儲存庫
Spring Data 包括對 Neo4j 的儲存庫支援。有關 Spring Data Neo4j 的完整詳細資訊,請參閱參考文件。
Spring Data Neo4j 與 Spring Data JPA 以及許多其他 Spring Data 模組共享通用基礎架構。您可以採用先前的 JPA 範例,並將 City
定義為 Spring Data Neo4j @Node
而不是 JPA @Entity
,儲存庫抽象以相同的方式運作,如下例所示
-
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?>?
}
spring-boot-starter-data-neo4j
Starter 啟用了儲存庫支援以及交易管理。Spring Boot 支援傳統和反應式 Neo4j 儲存庫,使用 Neo4jTemplate
或 ReactiveNeo4jTemplate
Bean。當 Project Reactor 在類別路徑上可用時,也會自動組態反應式樣式。
儲存庫和實體透過掃描找到。預設情況下,會掃描自動組態套件。您可以使用 @EnableNeo4jRepositories
和 @EntityScan
分別自訂儲存庫和實體的搜尋位置。
在使用反應式樣式的應用程式中,不會自動組態
|
Elasticsearch
Elasticsearch 是一個開源、分散式、RESTful 搜尋和分析引擎。Spring Boot 為 Elasticsearch 客户端提供基本的自動組態。
Spring Boot 支援多個客户端
-
官方低階 REST 客户端
-
官方 Java API 客户端
-
Spring Data Elasticsearch 提供的
ReactiveElasticsearchClient
Spring Boot 提供了一個專用的 Starter,spring-boot-starter-data-elasticsearch
。
使用 REST 客户端連線到 Elasticsearch
Elasticsearch 附帶了兩個不同的 REST 客户端,您可以使用它們來查詢叢集:來自 org.elasticsearch.client:elasticsearch-rest-client
模組的 低階客户端 和來自 co.elastic.clients:elasticsearch-java
模組的 Java API 客户端。此外,Spring Boot 還提供了來自 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
如果類別路徑上有 elasticsearch-rest-client
,Spring Boot 將自動組態並註冊 RestClient
Bean。除了先前描述的屬性外,要微調 RestClient
,您可以註冊任意數量的 Bean,這些 Bean 實作了 RestClientBuilderCustomizer
以進行更進階的自訂。要完全控制客户端的組態,請定義 RestClientBuilder
Bean。
此外,如果 elasticsearch-rest-client-sniffer
在類別路徑上,則會自動組態 Sniffer
以自動從正在執行的 Elasticsearch 叢集中探索節點,並將它們設定在 RestClient
Bean 上。您可以進一步調整 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
如果類別路徑上有 co.elastic.clients:elasticsearch-java
,Spring Boot 將自動組態並註冊 ElasticsearchClient
Bean。
ElasticsearchClient
使用依賴於先前描述的 RestClient
的傳輸。因此,先前描述的屬性可用於組態 ElasticsearchClient
。此外,您可以定義 RestClientOptions
Bean 以進一步控制傳輸的行為。
使用 ReactiveElasticsearchClient 連線到 Elasticsearch
Spring Data Elasticsearch 提供了 ReactiveElasticsearchClient
,用於以反應式方式查詢 Elasticsearch 實例。如果您的類別路徑上有 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)
}
}
在存在 spring-data-elasticsearch
和 Reactor 的情況下,Spring Boot 也可以自動組態 ReactiveElasticsearchClient
和 ReactiveElasticsearchTemplate
作為 Bean。它們是其他 REST 客户端的反應式等效項。
Spring Data Elasticsearch 儲存庫
Spring Data 包括對 Elasticsearch 的儲存庫支援。與先前討論的 JPA 儲存庫一樣,基本原則是查詢會根據方法名稱自動為您建構。
實際上,Spring Data JPA 和 Spring Data Elasticsearch 共享相同的通用基礎架構。您可以採用先前的 JPA 範例,並假設 City
現在是一個 Elasticsearch @Document
類別,而不是 JPA @Entity
,它以相同的方式運作。
儲存庫和文件透過掃描找到。預設情況下,會掃描自動組態套件。您可以使用 @EnableElasticsearchRepositories
和 @EntityScan
分別自訂儲存庫和文件的搜尋位置。
有關 Spring Data Elasticsearch 的完整詳細資訊,請參閱參考文件。 |
Spring Boot 支援傳統和反應式 Elasticsearch 儲存庫,使用 ElasticsearchRestTemplate
或 ReactiveElasticsearchTemplate
Bean。最有可能的是,如果存在所需的依賴項,這些 Bean 將由 Spring Boot 自動組態。
如果您希望使用自己的範本來支援 Elasticsearch 儲存庫,您可以新增自己的 ElasticsearchRestTemplate
或 ElasticsearchOperations
@Bean
,只要它被命名為 "elasticsearchTemplate"
即可。相同的規則適用於 ReactiveElasticsearchTemplate
和 ReactiveElasticsearchOperations
,Bean 名稱為 "reactiveElasticsearchTemplate"
。
您可以選擇使用以下屬性停用儲存庫支援
-
Properties
-
YAML
spring.data.elasticsearch.repositories.enabled=false
spring:
data:
elasticsearch:
repositories:
enabled: false
Cassandra
Cassandra 是一個開源、分散式資料庫管理系統,旨在跨多個商用伺服器處理大量資料。Spring Boot 為 Cassandra 以及 Spring Data Cassandra 提供的基於其之上的抽象層提供了自動組態。有一個 spring-boot-starter-data-cassandra
Starter 可以方便地收集依賴項。
連線到 Cassandra
您可以像注入任何其他 Spring Bean 一樣,注入自動組態的 CassandraTemplate
或 Cassandra 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 。 |
可以將自動組態的 CqlSession
組態為使用 SSL 與伺服器通訊,方法是設定如下例所示的屬性
-
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 驅動程式有自己的組態基礎架構,可在類別路徑的根目錄載入 Spring Boot 預設情況下不搜尋此類檔案,但可以使用 對於更進階的驅動程式自訂,您可以註冊任意數量的 Bean,這些 Bean 實作了 |
如果您使用 CqlSessionBuilder 建立多個 CqlSession Bean,請記住建構器是可變的,因此請確保為每個 Session 注入一個新的副本。 |
以下程式碼列表顯示如何注入 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
,它將取代預設值。
Couchbase
Couchbase 是一個開源、分散式、多模型 NoSQL 文件導向資料庫,針對互動式應用程式進行了最佳化。Spring Boot 為 Couchbase 以及 Spring Data Couchbase 提供的基於其之上的抽象層提供了自動組態。有 spring-boot-starter-data-couchbase
和 spring-boot-starter-data-couchbase-reactive
Starter 可以方便地收集依賴項。
連線到 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"
查看 spring.couchbase.env.* 屬性以取得更多詳細資訊。要取得更多控制權,可以使用一個或多個 ClusterEnvironmentBuilderCustomizer Bean。 |
Spring Data Couchbase 儲存庫
Spring Data 包括對 Couchbase 的儲存庫支援。
儲存庫和文件透過掃描找到。預設情況下,會掃描自動組態套件。您可以使用 @EnableCouchbaseRepositories
和 @EntityScan
分別自訂儲存庫和文件的搜尋位置。
有關 Spring Data Couchbase 的完整詳細資訊,請參閱參考文件。
您可以像注入任何其他 Spring Bean 一樣,注入自動組態的 CouchbaseTemplate
實例,前提是 CouchbaseClientFactory
Bean 可用。當 Cluster
可用(如上所述)且已指定 Bucket 名稱時,就會發生這種情況
-
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,以覆寫自動組態提供的 Bean
-
名稱為
couchbaseMappingContext
的CouchbaseMappingContext
@Bean
。 -
名稱為
couchbaseCustomConversions
的CustomConversions
@Bean
。 -
名稱為
couchbaseTemplate
的CouchbaseTemplate
@Bean
。
為了避免在您自己的組態中硬式編碼這些名稱,您可以重複使用 Spring Data Couchbase 提供的 BeanNames
。例如,您可以自訂要使用的轉換器,如下所示
-
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 提供。有一個 spring-boot-starter-data-ldap
Starter 可以方便地收集依賴項。
連線到 LDAP 伺服器
若要連線到 LDAP 伺服器,請確保您宣告了對 spring-boot-starter-data-ldap
starter 或 spring-ldap-core
的依賴,然後在您的 application.properties 中宣告伺服器的 URL,如下列範例所示
-
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 的完整詳細資訊,請參閱參考文件。 |
您也可以注入自動配置的 LdapTemplate
實例,就像使用任何其他 Spring Bean 一樣,如下列範例所示
-
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 清單表示法。在 properties 檔案中,您必須將索引包含在屬性名稱中
|
預設情況下,伺服器會在隨機埠上啟動,並觸發常規 LDAP 支援。無需指定 spring.ldap.urls
屬性。
如果您的類別路徑上有 schema.ldif
檔案,則會使用它來初始化伺服器。如果您想從不同的資源載入初始化腳本,您也可以使用 spring.ldap.embedded.ldif
屬性。
預設情況下,會使用標準 schema 來驗證 LDIF
檔案。您可以透過設定 spring.ldap.embedded.validation.enabled
屬性來完全關閉驗證。如果您有自訂屬性,可以使用 spring.ldap.embedded.validation.schema
來定義您的自訂屬性類型或物件類別。
InfluxDB
InfluxDB 的自動配置已被棄用,並計劃在 Spring Boot 3.4 中移除,以支持新的 InfluxDB Java client,它提供了自己的 Spring Boot 整合。 |
InfluxDB 是一個開源時序資料庫,針對快速、高可用性儲存和檢索時序資料進行了優化,應用於操作監控、應用程式指標、物聯網感測器資料和即時分析等領域。
連線到 InfluxDB
如果 influxdb-java
client 在類別路徑上,並且使用 spring.influx.url
設定了資料庫的 URL,Spring Boot 會自動配置一個 InfluxDB
實例。
如果連線到 InfluxDB 需要使用者名稱和密碼,您可以相應地設定 spring.influx.user
和 spring.influx.password
屬性。
InfluxDB 依賴 OkHttp。如果您需要調整 InfluxDB
在幕後使用的 http client,您可以註冊一個 InfluxDbOkHttpClientBuilderProvider
bean。
如果您需要更多控制權來進行配置,請考慮註冊一個 InfluxDbCustomizer
bean。