使用 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 在其上提供的抽象提供了基本自動配置。
提供了一個 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 時,將忽略 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
您還可以註冊任意數量實現 LettuceClientConfigurationBuilderCustomizer 的 bean,用於更高階的自定義。ClientResources 也可以透過 ClientResourcesBuilderCustomizer 進行自定義。如果您使用 Jedis,JedisClientConfigurationBuilderCustomizer 也可用。另外,您可以註冊一個 RedisStandaloneConfiguration 、RedisSentinelConfiguration 或 RedisClusterConfiguration 型別的 bean,以便完全控制配置。 |
如果您添加了自己的任意自動配置型別的 @Bean
,它將替換預設配置(RedisTemplate
除外,在這種情況下,排除是基於 bean 名稱 redisTemplate
,而不是其型別)。
預設情況下,如果 commons-pool2
在 classpath 中,將自動配置一個連線池工廠。
自動配置的 RedisConnectionFactory
可以配置為使用 SSL 與伺服器通訊,透過設定屬性即可,如下例所示
-
Properties
-
YAML
spring.data.redis.ssl.enabled=true
spring:
data:
redis:
ssl:
enabled: true
可以在 SSL bundle 中配置自定義 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 資料庫,您可以注入一個自動配置的 MongoDatabaseFactory
。預設情況下,例項會嘗試連線到 mongodb:///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 並配置附加設定,例如 *副本集 (replica set)*,如下例所示
-
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 bundle 中配置自定義 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 伺服器,您可以注入一個自動配置的 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.*
屬性配置 driver 的各個方面。以下示例展示瞭如何配置要使用的 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
是使用 org.neo4j.driver.Config$ConfigBuilder
建立的。為了微調其配置,請宣告一個或多個 ConfigBuilderCustomizer
bean。每個 bean 都將按順序呼叫用於構建 Driver
的 org.neo4j.driver.Config$ConfigBuilder
。
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
,倉庫抽象會以相同的方式工作,如下例所示
-
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 使用 Neo4jTemplate
或 ReactiveNeo4jTemplate
bean 支援經典和響應式 Neo4j 倉庫。當 classpath 中存在 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
在 classpath 中,Spring Boot 將自動配置並註冊一個 RestClient
bean。除了前面描述的屬性外,要微調 RestClient
,您可以註冊任意數量實現 RestClientBuilderCustomizer
的 bean,用於更高階的自定義。要完全控制客戶端的配置,請定義一個 RestClientBuilder
bean。
此外,如果 elasticsearch-rest-client-sniffer
在 classpath 中,將自動配置一個 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
在 classpath 中,Spring Boot 將自動配置並註冊一個 ElasticsearchClient
bean。
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)
}
}
如果存在 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 倉庫,使用 ElasticsearchTemplate
或 ReactiveElasticsearchTemplate
bean。如果存在所需的依賴項,這些 bean 很可能由 Spring Boot 自動配置。
如果你希望使用自己的模板來支援 Elasticsearch 倉庫,可以新增自己的 ElasticsearchTemplate
或 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
啟動器,用於方便地收集依賴項。
連線到 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"
如果所有 contact points 的埠相同,可以使用快捷方式,只指定主機名,如下例所示:
-
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 驅動程式有自己的配置基礎設施,它會在 classpath 的根目錄載入一個 Spring Boot 預設不查詢此類檔案,但可以使用 對於更高階的驅動程式自定義,可以註冊任意數量的實現 |
如果使用 CqlSessionBuilder 建立多個 CqlSession bean,請記住構建器是可變的,因此請確保為每個會話注入一個新的副本。 |
以下程式碼清單展示瞭如何注入 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
,它將替換預設的 bean。
Spring Data Cassandra 倉庫
Spring Data 包含了對 Cassandra 的基本倉庫支援。目前,這比前面討論的 JPA 倉庫受限,並且需要使用 @Query
註解的查詢方法。
倉庫和實體透過掃描查詢。預設情況下,自動配置包會被掃描。你可以使用 @EnableCassandraRepositories
和 @EntityScan
分別自定義查詢倉庫和實體的位置。
有關 Spring Data Cassandra 的完整詳情,請參閱其參考文件。 |
Couchbase
Couchbase 是一個開源的分散式多模型 NoSQL 文件導向資料庫,針對互動式應用程式進行了最佳化。Spring Boot 為 Couchbase 及其上由 Spring Data Couchbase 提供的抽象提供了自動配置。有 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"
可以使用客戶端證書進行身份驗證,而不是使用使用者名稱和密碼。包含客戶端證書的 Java KeyStore 的位置和密碼可以配置,如下例所示:
-
Properties
-
YAML
spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.env.ssl.enabled=true
spring.couchbase.authentication.jks.location=classpath:client.p12
spring.couchbase.authentication.jks.password=secret
spring:
couchbase:
connection-string: "couchbase://192.168.1.123"
env:
ssl:
enabled: true
authentication:
jks:
location: "classpath:client.p12"
password: "secret"
PEM 編碼的證書和私鑰可以配置,如下例所示:
-
Properties
-
YAML
spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.env.ssl.enabled=true
spring.couchbase.authentication.pem.certificates=classpath:client.crt
spring.couchbase.authentication.pem.private-key=classpath:client.key
spring:
couchbase:
connection-string: "couchbase://192.168.1.123"
env:
ssl:
enabled: true
authentication:
pem:
certificates: "classpath:client.crt"
private-key: "classpath:client.key"
也可以自定義一些 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 的完整詳情,請參閱其參考文件。
如果 CouchbaseClientFactory
bean 可用,你可以像注入任何其他 Spring Bean 一樣注入自動配置的 CouchbaseTemplate
例項。當 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
啟動器,用於方便地收集依賴項。
連線到 LDAP 伺服器
要連線到 LDAP 伺服器,請確保聲明瞭對 spring-boot-starter-data-ldap
啟動器或 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 的完整詳情,請參閱其參考文件。 |
你也可以像注入任何其他 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 列表符號。在 properties 檔案中,必須將索引包含在屬性名稱中:
|
預設情況下,伺服器在隨機埠上啟動,並觸發常規的 LDAP 支援。無需指定 spring.ldap.urls
屬性。
如果 classpath 中存在 schema.ldif
檔案,它將用於初始化伺服器。如果想從不同的資源載入初始化指令碼,也可以使用 spring.ldap.embedded.ldif
屬性。
預設情況下,使用標準模式驗證 LDIF
檔案。可以透過設定 spring.ldap.embedded.validation.enabled
屬性來完全關閉驗證。如果具有自定義屬性,可以使用 spring.ldap.embedded.validation.schema
定義自定義屬性型別或物件類。