使用 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 客戶端:the new InfluxDB Java client。
Redis
Redis 是一個快取、訊息代理和功能豐富的鍵值儲存。Spring Boot 為 Lettuce 和 Jedis 客戶端庫以及 Spring Data Redis 提供的基於它們的抽象提供了基本的自動配置。
有一個 spring-boot-starter-data-redis 啟動器,用於以方便的方式收集依賴項。預設情況下,它使用 Lettuce。該啟動器同時處理傳統和響應式應用程式。
我們還提供了一個 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")
}
}
預設情況下,該例項嘗試連線到 localhost:6379 上的 Redis 伺服器。您可以使用 spring.data.redis.* 屬性指定自定義連線詳細資訊,如以下示例所示
-
屬性
-
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 時,主機、埠、使用者名稱和密碼屬性將被忽略。這在以下示例中顯示
-
屬性
-
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 或 RedisStaticMasterReplicaConfiguration 的 bean,以完全控制配置。
| Jedis 不支援 master/replica。 |
如果您新增任何自動配置型別的自己的 @Bean,它將替換預設值(除了 RedisTemplate 的情況,當排除是基於 bean 名稱 redisTemplate 而不是其型別時)。
預設情況下,如果 commons-pool2 在類路徑上,則會自動配置一個池化連線工廠。
自動配置的 RedisConnectionFactory 可以配置為使用 SSL 與伺服器通訊,透過設定屬性,如本例所示
-
屬性
-
YAML
spring.data.redis.ssl.enabled=true
spring:
data:
redis:
ssl:
enabled: true
自定義 SSL 信任材料可以在 SSL bundle 中配置,並應用於 RedisConnectionFactory,如本例所示
-
屬性
-
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 啟動器。
連線到 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 配置。每個都將依次使用用於構建 MongoClientSettings 的 MongoClientSettings.Builder 進行呼叫。
您可以設定 spring.mongodb.uri 屬性來更改 URL 並配置其他設定,例如 副本集,如以下示例所示
-
屬性
-
YAML
spring.mongodb.uri=mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test
spring:
mongodb:
uri: "mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test"
或者,您可以使用離散屬性指定連線詳細資訊。例如,您可以在 application.properties 中宣告以下設定
-
屬性
-
YAML
spring.mongodb.host=mongoserver1.example.com
spring.mongodb.port=27017
spring.mongodb.additional-hosts[0]=mongoserver2.example.com:23456
spring.mongodb.database=test
spring.mongodb.username=user
spring.mongodb.password=secret
spring:
mongodb:
host: "mongoserver1.example.com"
port: 27017
additional-hosts:
- "mongoserver2.example.com:23456"
database: "test"
username: "user"
password: "secret"
自動配置的 MongoClient 可以配置為使用 SSL 與伺服器通訊,透過設定屬性,如本例所示
-
屬性
-
YAML
spring.mongodb.uri=mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test
spring.mongodb.ssl.enabled=true
spring:
mongodb:
uri: "mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test"
ssl:
enabled: true
自定義 SSL 信任材料可以在 SSL bundle 中配置,並應用於 MongoClient,如本例所示
-
屬性
-
YAML
spring.mongodb.uri=mongodb://user:[email protected]:27017,mongoserver2.example.com:23456/test
spring.mongodb.ssl.bundle=example
spring:
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 Repositories
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 圖資料庫,它使用豐富的由一流關係連線的節點資料模型,這比傳統的關係型資料庫方法更適合連線大資料。Spring Boot 為使用 Neo4j 提供了多種便利,包括 spring-boot-starter-data-neo4j 啟動器。
連線到 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.Driver
import org.neo4j.driver.TransactionContext
import org.neo4j.driver.Values
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 和憑據
-
屬性
-
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。每個都將依次使用用於構建 Driver 的 org.neo4j.driver.Config$ConfigBuilder 進行呼叫。
Spring Data Neo4j Repositories
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 啟動器啟用了儲存庫支援以及事務管理。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 提供了一個專用的啟動器 spring-boot-starter-data-elasticsearch。
使用 REST 客戶端連線到 Elasticsearch
Elasticsearch 提供了兩個不同的 REST 客戶端,您可以使用它們來查詢叢集:低階客戶端 和 Java API 客戶端。Java API 客戶端由 co.elastic.clients:elasticsearch-java 模組提供,低階客戶端由 co.elastic.clients:elasticsearch-rest5-client 模組提供。此外,Spring Boot 支援來自 org.springframework.data:spring-data-elasticsearch 模組的響應式客戶端。預設情況下,客戶端將目標設定為 localhost:9200。您可以使用 spring.elasticsearch.* 屬性進一步調整客戶端的配置方式,如以下示例所示
-
屬性
-
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"
使用 Rest5Client 連線到 Elasticsearch
如果您的類路徑中有 co.elastic.clients:elasticsearch-rest5-client,Spring Boot 將自動配置並註冊一個 Rest5Client bean。除了前面描述的屬性之外,為了微調 Rest5Client,您可以註冊任意數量實現 Rest5ClientBuilderCustomizer 的 bean,以進行更高階的自定義。要完全控制客戶端的配置,請定義一個 Rest5ClientBuilder bean。
此外,可以自動配置一個 Sniffer,以自動發現正在執行的 Elasticsearch 叢集中的節點並將其設定到 Rest5Client bean 上。您可以進一步調整 Sniffer 的配置,如以下示例所示
-
屬性
-
YAML
spring.elasticsearch.restclient.sniffer.enabled=true
spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
spring:
elasticsearch:
restclient:
sniffer:
enabled: true
interval: "10m"
delay-after-failure: "30s"
使用 ElasticsearchClient 連線到 Elasticsearch
如果您使用 spring-boot-starter-elasticsearch 或已將 co.elastic.clients:elasticsearch-java 新增到類路徑中,Spring Boot 將自動配置並註冊一個 ElasticsearchClient bean。
ElasticsearchClient 使用的傳輸層依賴於前面描述的 Rest5Client。因此,前面描述的屬性可用於配置 ElasticsearchClient。此外,您可以定義一個 Rest5ClientOptions bean,以進一步控制傳輸層的行為。
使用 ReactiveElasticsearchClient 連線到 Elasticsearch
Spring Data Elasticsearch 附帶了 ReactiveElasticsearchClient,用於以響應式方式查詢 Elasticsearch 例項。如果您的類路徑中有 Spring Data Elasticsearch 和 Reactor,Spring Boot 將自動配置並註冊一個 ReactiveElasticsearchClient。
ReactiveElasticsearchClient 使用一個傳輸層,它依賴於前面描述的 Rest5Client。因此,前面描述的屬性可以用於配置 ReactiveElasticsearchClient。此外,您可以定義一個 Rest5ClientOptions 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。如果存在所需的依賴項,Spring Boot 很可能會自動配置這些 bean。
如果您希望使用自己的模板來支援 Elasticsearch 儲存庫,您可以新增自己的 ElasticsearchTemplate 或 ElasticsearchOperations @Bean,只要它被命名為 "elasticsearchTemplate"。同樣適用於 ReactiveElasticsearchTemplate 和 ReactiveElasticsearchOperations,其 bean 名稱為 "reactiveElasticsearchTemplate"。
您可以使用以下屬性停用儲存庫支援
-
屬性
-
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 一樣注入自動配置的 CqlTemplate、CassandraTemplate 或 Cassandra CqlSession 例項。spring.cassandra.* 屬性可用於自定義連線。通常,您提供 keyspace-name 和 contact-points 以及本地資料中心名稱,如以下示例所示
-
屬性
-
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"
如果所有聯絡點的埠都相同,則可以使用快捷方式,只指定主機名,如以下示例所示
-
屬性
-
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 與伺服器通訊,透過設定屬性,如本例所示
-
屬性
-
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 bundle 中配置,並應用於 CqlSession,如本例所示
-
屬性
-
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 預設不查詢此類檔案,但可以使用 對於更高階的驅動程式自定義,您可以註冊任意數量實現 |
如果您使用 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)
}
}
如果您添加了自己的 @Bean 型別 CassandraTemplate,它將替換預設值。
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.* 屬性可用於自定義連線。通常,您提供 連線字串 和用於身份驗證的憑據。可以使用使用者名稱和密碼配置基本身份驗證,如以下示例所示
-
屬性
-
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 的位置和密碼可以配置,如以下示例所示
-
屬性
-
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 編碼的證書和私鑰可以配置,如以下示例所示
-
屬性
-
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 bundle
-
屬性
-
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(如上所述)並且已指定儲存桶名稱時,就會發生這種情況
-
屬性
-
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@Bean,名稱為couchbaseMappingContext。 -
一個
CustomConversions@Bean,名稱為couchbaseCustomConversions。 -
一個
CouchbaseTemplate@Bean,名稱為couchbaseTemplate。
為了避免在您自己的配置中硬編碼這些名稱,您可以重用 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,如以下示例所示
-
屬性
-
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 屬性,如下所示
-
屬性
-
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 屬性。
預設情況下,使用標準模式來驗證 LDIF 檔案。您可以透過設定 spring.ldap.embedded.validation.enabled 屬性完全關閉驗證。如果您有自定義屬性,您可以使用 spring.ldap.embedded.validation.schema 來定義您的自定義屬性型別或物件類。