使用 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 為 LettuceJedis 客戶端庫以及 Spring Data Redis 提供的基於它們的抽象提供了基本的自動配置。

有一個 spring-boot-starter-data-redis 啟動器,用於以方便的方式收集依賴項。預設情況下,它使用 Lettuce。該啟動器同時處理傳統和響應式應用程式。

我們還提供了一個 spring-boot-starter-data-redis-reactive 啟動器,以與其他支援響應式的儲存保持一致。

連線到 Redis

您可以像注入任何其他 Spring Bean 一樣注入自動配置的 RedisConnectionFactoryStringRedisTemplate 或普通的 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 也可用。

或者,您可以註冊型別為 RedisStandaloneConfigurationRedisSentinelConfigurationRedisClusterConfigurationRedisStaticMasterReplicaConfiguration 的 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-mongodbspring-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 配置。每個都將依次使用用於構建 MongoClientSettingsMongoClientSettings.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.mongodb.port,則使用預設值 27017。您可以從前面所示的示例中刪除此行。

您也可以使用 host:port 語法將埠指定為主機地址的一部分。如果需要更改 additional-hosts 條目的埠,則應使用此格式。

如果您不使用 Spring Data MongoDB,則可以注入 MongoClient bean,而不是使用 MongoDatabaseFactory。如果您想完全控制 MongoDB 連線的建立,您也可以宣告自己的 MongoDatabaseFactoryMongoClient 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。每個都將依次使用用於構建 Driverorg.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 儲存庫,使用 Neo4jTemplateReactiveNeo4jTemplate bean。當 Project Reactor 在類路徑上可用時,響應式樣式也會自動配置。

儲存庫和實體透過掃描查詢。預設情況下,掃描 自動配置包。您可以使用 @EnableNeo4jRepositories@EntityScan 分別自定義查詢儲存庫和實體的位置。

在採用響應式風格的應用程式中,不會自動配置 ReactiveTransactionManager。要啟用事務管理,必須在您的配置中定義以下 bean

  • Java

  • Kotlin

import org.neo4j.driver.Driver;

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

@Configuration(proxyBeanMethods = false)
public class MyNeo4jConfiguration {

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

}
import org.neo4j.driver.Driver
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider
import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager

@Configuration(proxyBeanMethods = false)
class MyNeo4jConfiguration {

	@Bean
	fun reactiveTransactionManager(driver: Driver,
			databaseNameProvider: ReactiveDatabaseSelectionProvider): ReactiveNeo4jTransactionManager {
		return ReactiveNeo4jTransactionManager(driver, databaseNameProvider)
	}
}

Elasticsearch

Elasticsearch 是一個開源、分散式、RESTful 搜尋和分析引擎。Spring Boot 為 Elasticsearch 客戶端提供了基本的自動配置。

Spring Boot 支援多種客戶端

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 還可以自動配置 ReactiveElasticsearchClientReactiveElasticsearchTemplate 作為 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 儲存庫,使用 ElasticsearchTemplateReactiveElasticsearchTemplate bean。如果存在所需的依賴項,Spring Boot 很可能會自動配置這些 bean。

如果您希望使用自己的模板來支援 Elasticsearch 儲存庫,您可以新增自己的 ElasticsearchTemplateElasticsearchOperations @Bean,只要它被命名為 "elasticsearchTemplate"。同樣適用於 ReactiveElasticsearchTemplateReactiveElasticsearchOperations,其 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 一樣注入自動配置的 CqlTemplateCassandraTemplate 或 Cassandra CqlSession 例項。spring.cassandra.* 屬性可用於自定義連線。通常,您提供 keyspace-namecontact-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 驅動程式有自己的配置基礎設施,它在類路徑的根目錄下載入一個 application.conf

Spring Boot 預設不查詢此類檔案,但可以使用 spring.cassandra.config 載入一個。如果屬性同時存在於 spring.cassandra.* 和配置檔案中,則 spring.cassandra.* 中的值優先。

對於更高階的驅動程式自定義,您可以註冊任意數量實現 DriverConfigLoaderBuilderCustomizer 的 bean。CqlSession 可以使用型別為 CqlSessionBuilderCustomizer 的 bean 進行自定義。

如果您使用 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-couchbasespring-boot-starter-data-couchbase-reactive 啟動器,用於以便捷的方式收集依賴項。

連線到 Couchbase

您可以透過新增 Couchbase SDK 和一些配置來獲取 Clusterspring.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

為了避免在您自己的配置中硬編碼這些名稱,您可以重用 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.basespring.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 檔案中,您必須將索引作為屬性名稱的一部分

  • 屬性

  • YAML

spring.ldap.embedded.base-dn[0]=dc=spring,dc=io
spring.ldap.embedded.base-dn[1]=dc=vmware,dc=com
spring.ldap.embedded.base-dn:
- "dc=spring,dc=io"
- "dc=vmware,dc=com"

預設情況下,伺服器在隨機埠上啟動並觸發常規 LDAP 支援。無需指定 spring.ldap.urls 屬性。

如果您的類路徑上有一個 schema.ldif 檔案,它將用於初始化伺服器。如果您想從不同的資源載入初始化指令碼,您也可以使用 spring.ldap.embedded.ldif 屬性。

預設情況下,使用標準模式來驗證 LDIF 檔案。您可以透過設定 spring.ldap.embedded.validation.enabled 屬性完全關閉驗證。如果您有自定義屬性,您可以使用 spring.ldap.embedded.validation.schema 來定義您的自定義屬性型別或物件類。

© . This site is unofficial and not affiliated with VMware.