NoSQL テクノロジーの使用
Spring Data は、次のようなさまざまな NoSQL テクノロジーへのアクセスに役立つ追加プロジェクトを提供します。
これらのうち、Spring Boot は、Cassandra、Couchbase、Elasticsearch、LDAP、MongoDB、Neo4J、Redis の自動構成を提供します。さらに、Apache Geode 用 Spring Boot [GitHub] (英語) は、Apache Geode の自動構成を提供します。他のプロジェクトを利用することもできますが、自分で構成する必要があります。spring.io/projects/spring-data の適切なリファレンスドキュメントを参照してください。
Spring Boot は InfluxDB クライアントの自動構成も提供しますが、独自の Spring Boot 統合を提供する新しい InfluxDB Java クライアント [GitHub] (英語) を優先して非推奨になりました。
Redis
Redis (英語) は、キャッシュ、メッセージブローカー、豊富な機能を備えたキーと値のストアです。Spring Boot は、Lettuce [GitHub] (英語) および Jedis [GitHub] (英語) クライアントライブラリの基本的な自動構成と、Spring Data Redis [GitHub] (英語) が提供する抽象化を提供します。
依存関係を便利な方法で収集するための spring-boot-starter-data-redis
スターターがあります。デフォルトでは、Lettuce [GitHub] (英語) が使用されます。このスターターは、従来のアプリケーションとリアクティブアプリケーションの両方を処理します。
リアクティブサポートを備えた他のストアとの一貫性を保つために、spring-boot-starter-data-redis-reactive スターターも提供しています。 |
Redis への接続
他の Spring Bean と同様に、自動構成された RedisConnectionFactory
(Javadoc) 、StringRedisTemplate
(Javadoc) 、またはバニラ RedisTemplate
(Javadoc) インスタンスを挿入できます。次のリストは、このような 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 (Javadoc) を実装する任意の数の Bean を登録することもできます。ClientResources (英語) は、ClientResourcesBuilderCustomizer (Javadoc) を使用してカスタマイズすることもできます。Jedis を使用する場合は、JedisClientConfigurationBuilderCustomizer (Javadoc) も利用できます。または、RedisStandaloneConfiguration (Javadoc) 、RedisSentinelConfiguration (Javadoc) 、または RedisClusterConfiguration (Javadoc) 型の Bean を登録して、構成を完全に制御することもできます。 |
自動構成されたいずれかの型の @Bean
(Javadoc) を独自に追加した場合、それがデフォルトを置き換えます (ただし、RedisTemplate
(Javadoc) の場合は、除外が型ではなく Bean の名前 redisTemplate
に基づいている場合を除く)。
デフォルトでは、commons-pool2
がクラスパス上にある場合、プールされた接続ファクトリは自動構成されます。
自動構成された RedisConnectionFactory
(Javadoc) は、次の例に示すようにプロパティを設定することで、サーバーとの通信に SSL を使用するように構成できます。
プロパティ
YAML
spring.data.redis.ssl.enabled=true
spring:
data:
redis:
ssl:
enabled: true
次の例に示すように、カスタム SSL 信頼マテリアルを SSL バンドルで構成し、RedisConnectionFactory
(Javadoc) に適用できます。
プロパティ
YAML
spring.data.redis.ssl.bundle=example
spring:
data:
redis:
ssl:
bundle: "example"
MongoDB
MongoDB (英語) は、従来のテーブルベースのリレーショナルデータではなく、JSON のようなスキーマを使用するオープンソースの NoSQL ドキュメントデータベースです。Spring Boot は、spring-boot-starter-data-mongodb
および spring-boot-starter-data-mongodb-reactive
スターターなど、MongoDB を操作するための便利な機能をいくつか提供します。
MongoDB データベースへの接続
MongoDB データベースにアクセスするには、自動構成された MongoDatabaseFactory
(Javadoc) を挿入できます。デフォルトでは、インスタンスは mongodb://localhost/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
(Javadoc) が自動構成されます。
自動構成された MongoClient
(英語) は、MongoClientSettings
(英語) Bean を使用して作成されます。独自の MongoClientSettings
(英語) を定義している場合は、それが変更されずに使用され、spring.data.mongodb
プロパティは無視されます。それ以外の場合は、MongoClientSettings
(英語) が自動構成され、spring.data.mongodb
プロパティが適用されます。いずれの場合も、1 つ以上の MongoClientSettingsBuilderCustomizer
(Javadoc) Bean を宣言して、MongoClientSettings
(英語) 構成を微調整できます。それぞれが、MongoClientSettings
(英語) の構築に使用される MongoClientSettings.Builder
(英語) とともに順番に呼び出されます。
次の例に示すように、spring.data.mongodb.uri
プロパティを設定して URL を変更し、レプリカセットなどの追加設定を構成できます。
プロパティ
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
で次の設定を宣言できます。
プロパティ
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 を使用するように構成できます。
プロパティ
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
(英語) に適用できます。
プロパティ
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 を使用しない場合は、MongoDatabaseFactory (Javadoc) を使用する代わりに MongoClient (英語) Bean を挿入できます。MongoDB 接続の確立を完全に制御したい場合は、独自の MongoDatabaseFactory (Javadoc) または MongoClient (英語) Bean を宣言することもできます。 |
リアクティブドライバーを使用している場合、SSL には Netty が必要です。Netty が使用可能であり、使用するファクトリがまだカスタマイズされていない場合、自動構成によってこのファクトリが自動的に構成されます。 |
MongoTemplate
Spring Data MongoDB は、Spring の JdbcTemplate
(Javadoc) と設計が非常によく似た MongoTemplate
(Javadoc) クラスを提供します。JdbcTemplate
(Javadoc) と同様に、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
(Javadoc) API ドキュメントを参照してください。
Spring Data MongoDB リポジトリ
Spring Data には、MongoDB のリポジトリサポートが含まれています。前述の JPA リポジトリと同様に、基本的な原則は、クエリがメソッド名に基づいて自動的に構築されることです。
実際、Spring Data JPA と Spring Data MongoDB はどちらも同じ共通インフラストラクチャを共有しています。先ほどの JPA の例で、City
が JPA @Entity
(英語) ではなく MongoDB データクラスになったと仮定すると、次の例に示すように同じように動作します。
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
(Javadoc) と @EntityScan
(Javadoc) を使用します。
豊富なオブジェクトマッピングテクノロジを含む Spring Data MongoDB の詳細については、リファレンスドキュメントを参照してください。 |
Neo4j
Neo4j (英語) は、ファーストクラスの関連で接続されたノードの豊富なデータモデルを使用するオープンソースの NoSQL グラフデータベースであり、従来の RDBMS アプローチよりも接続されたビッグデータに適しています。Spring Boot は、spring-boot-starter-data-neo4j
スターターなど、Neo4j を操作するための便利な機能をいくつか提供します。
Neo4j データベースへの接続
Neo4j サーバーにアクセスするには、自動構成された Driver
(英語) を挿入できます。デフォルトでは、インスタンスは Bolt プロトコルを使用して localhost:7687
で Neo4j サーバーに接続しようとします。次の例は、Session
(英語) などへのアクセスを提供する Neo4j Driver
(英語) を挿入する方法を示しています。
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 と資格情報を構成する方法を示しています。
プロパティ
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
を使用して作成されます。構成を微調整するには、1 つ以上の ConfigBuilderCustomizer
(Javadoc) 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
を JPA @Entity
(英語) ではなく Spring Data Neo4j @Node
(Javadoc) として定義すると、リポジトリの抽象化は、次の例に示すように、同じように機能します。
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 は、Neo4jTemplate
(Javadoc) または ReactiveNeo4jTemplate
(Javadoc) Bean を使用して、クラシック Neo4j リポジトリとリアクティブ Neo4j リポジトリの両方をサポートします。プロジェクト Reactor がクラスパスで使用可能な場合、リアクティブスタイルも自動的に構成されます。
リポジトリとエンティティはスキャンによって検出されます。デフォルトでは、自動構成パッケージがスキャンされます。リポジトリとエンティティを検索する場所をカスタマイズするには、それぞれ @EnableNeo4jRepositories
(Javadoc) と @EntityScan
(Javadoc) を使用します。
リアクティブスタイルを使用するアプリケーションでは、
|
Elasticsearch
Elasticsearch (英語) は、オープンソースの分散型 RESTful 検索および分析エンジンです。Spring Boot は、Elasticsearch クライアントの基本的な自動構成を提供します。
Spring Boot はいくつかのクライアントをサポートしています:
公式の低レベル REST クライアント
公式の Java API クライアント
Spring Data Elasticsearch が提供する
ReactiveElasticsearchClient
(Javadoc)
Spring Boot には専用のスターター spring-boot-starter-data-elasticsearch
が付属しています。
REST クライアントを使用して Elasticsearch に接続する
Elasticsearch には、クラスターのクエリに使用できる 2 つの異なる 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.*
プロパティを使用して、クライアントの構成方法をさらに調整できます。
プロパティ
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
(Javadoc) Bean を自動的に構成して登録します。前述のプロパティに加えて、RestClient
(Javadoc) を微調整するには、より高度なカスタマイズのために RestClientBuilderCustomizer
(Javadoc) を実装する任意の数の Bean を登録できます。クライアントの構成を完全に制御するには、RestClientBuilder
(英語) Bean を定義します。
さらに、elasticsearch-rest-client-sniffer
がクラスパス上にある場合、Sniffer
(英語) は自動的に構成され、実行中の Elasticsearch クラスターからノードを自動的に検出し、RestClient
(Javadoc) Bean に設定します。次の例に示すように、Sniffer
(英語) の構成方法をさらに調整できます。
プロパティ
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
(Javadoc) に依存するトランスポートを使用します。前述のプロパティを使用して ElasticsearchClient
(英語) を構成できます。さらに、トランスポートの動作をさらに制御するために、RestClientOptions
(英語) Bean を定義することもできます。
ReactiveElasticsearchClient を使用して Elasticsearch に接続する
Spring Data Elasticsearch は、リアクティブ方式で Elasticsearch インスタンスをクエリするための ReactiveElasticsearchClient
(Javadoc) を同梱しています。クラスパスに Spring Data、Elasticsearch、Reactor がある場合、Spring Boot は自動的に ReactiveElasticsearchClient
(Javadoc) を構成して登録します。
ReactiveElasticsearchClient
(Javadoc) は、前述の RestClient
(Javadoc) に依存するトランスポートを使用します。前述のプロパティを使用して ReactiveElasticsearchClient
(Javadoc) を構成できます。さらに、トランスポートの動作をさらに制御するために、RestClientOptions
(英語) Bean を定義することもできます。
Spring Data を使用して Elasticsearch に接続する
Elasticsearch に接続するには、ElasticsearchClient
(英語) Bean を定義し、Spring Boot によって自動構成されるか、アプリケーションによって手動で提供される必要があります (前のセクションを参照)。この構成が適切であれば、次の例に示すように、ElasticsearchTemplate
(Javadoc) を他の Spring Bean と同様に挿入できます。
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
(Javadoc) を Bean として自動構成することもできます。これらは、他の REST クライアントと同等のリアクティブクライアントです。
Spring Data Elasticsearch リポジトリ
Spring Data には、Elasticsearch のリポジトリサポートが含まれています。前述の JPA リポジトリと同様に、基本的な原則は、メソッド名に基づいてクエリが自動的に構築されることです。
実際、Spring Data JPA と Spring Data Elasticsearch はどちらも同じ共通インフラストラクチャを共有しています。先ほどの JPA の例で、City
が JPA @Entity
(英語) ではなく Elasticsearch @Document
(Javadoc) クラスになったと仮定すると、同じように動作します。
リポジトリとドキュメントはスキャンによって検出されます。デフォルトでは、自動構成パッケージがスキャンされます。リポジトリとドキュメントを検索する場所をカスタマイズするには、それぞれ @EnableElasticsearchRepositories
(Javadoc) と @EntityScan
(Javadoc) を使用します。
Spring Data Elasticsearch の詳細については、リファレンスドキュメントを参照してください。 |
Spring Boot は、ElasticsearchTemplate
(Javadoc) または ReactiveElasticsearchTemplate
(Javadoc) Bean を使用して、クラシック Elasticsearch リポジトリとリアクティブ Elasticsearch リポジトリの両方をサポートします。必要な依存関係が存在する場合、これらの Bean は Spring Boot によって自動的に構成される可能性が高くなります。
Elasticsearch リポジトリをバックアップするために独自のテンプレートを使用する場合は、"elasticsearchTemplate"
という名前であれば、独自の ElasticsearchTemplate
(Javadoc) または ElasticsearchOperations
(Javadoc) @Bean
(Javadoc) を追加できます。同じことが ReactiveElasticsearchTemplate
(Javadoc) および ReactiveElasticsearchOperations
(Javadoc) にも適用され、Bean の名前は "reactiveElasticsearchTemplate"
になります。
次のプロパティを使用して、リポジトリのサポートを無効にすることができます。
プロパティ
YAML
spring.data.elasticsearch.repositories.enabled=false
spring:
data:
elasticsearch:
repositories:
enabled: false
Cassandra
Cassandra [Apache] (英語) は、多数のコモディティサーバー間で大量のデータを処理できるように設計された、オープンソースの分散データベース管理システムです。Spring Boot は、Cassandra の自動構成と、その上に Spring Data Cassandra によって提供される抽象化を提供します。依存関係を便利な方法で収集するための spring-boot-starter-data-cassandra
スターターがあります。
Cassandra への接続
他の Spring Bean と同様に、自動構成された CassandraTemplate
(Javadoc) または 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"
これら 2 つの例は、デフォルトのポート 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 バンドルで構成し、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)
}
}
型 CassandraTemplate
(Javadoc) の独自の @Bean
(Javadoc) を追加すると、デフォルトが置き換えられます。
Spring Data Cassandra リポジトリ
Spring Data には、Cassandra の基本的なリポジトリサポートが含まれています。現在、これは前述の JPA リポジトリよりも制限されており、@Query
(Javadoc) アノテーション付きファインダーメソッドが必要です。
リポジトリとエンティティはスキャンによって検出されます。デフォルトでは、自動構成パッケージがスキャンされます。リポジトリとエンティティを検索する場所をカスタマイズするには、それぞれ @EnableCassandraRepositories
(Javadoc) と @EntityScan
(Javadoc) を使用します。
Spring Data Cassandra の詳細については、リファレンスドキュメントを参照してください。 |
Couchbase
Couchbase (英語) は、インタラクティブアプリケーション向けに最適化された、オープンソースの分散型マルチモデル NoSQL ドキュメント指向データベースです。Spring Boot は、Couchbase の自動構成と、Spring Data Couchbase [GitHub] (英語) によって提供されるその上の抽象化を提供します。依存関係を便利な方法で収集するための 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 サポートが有効になります。
プロパティ
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.* プロパティを確認してください。さらに制御するには、1 つ以上の ClusterEnvironmentBuilderCustomizer (Javadoc) Bean を使用できます。 |
Spring Data Couchbase リポジトリ
Spring Data には、Couchbase のリポジトリサポートが含まれています。
リポジトリとドキュメントはスキャンによって検出されます。デフォルトでは、自動構成パッケージがスキャンされます。リポジトリとドキュメントを検索する場所をカスタマイズするには、それぞれ @EnableCouchbaseRepositories
(Javadoc) と @EntityScan
(Javadoc) を使用します。
Spring Data Couchbase の詳細については、リファレンスドキュメントを参照してください。
CouchbaseClientFactory
(Javadoc) Bean が利用可能な場合は、他の Spring Bean と同様に、自動構成された CouchbaseTemplate
(Javadoc) インスタンスを挿入できます。これは、前述のように Cluster
(英語) が利用可能で、バケット名が指定されている場合に発生します。
プロパティ
YAML
spring.data.couchbase.bucket-name=my-bucket
spring:
data:
couchbase:
bucket-name: "my-bucket"
次の例は、CouchbaseTemplate
(Javadoc) 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
(Javadoc)@Bean
(Javadoc) 。couchbaseCustomConversions
という名前のCustomConversions
(Javadoc)@Bean
(Javadoc) 。couchbaseTemplate
という名前のCouchbaseTemplate
(Javadoc)@Bean
(Javadoc) 。
独自の設定でこれらの名前をハードコードしないようにするには、Spring Data Couchbase によって提供される BeanNames
(Javadoc) を再利用できます。たとえば、使用するコンバーターを次のようにカスタマイズできます。
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 [Wikipedia] (ライトウェイトディレクトリアクセスプロトコル)は、IP ネットワークを介して分散ディレクトリ情報サービスにアクセスして維持するための、ベンダーに依存しないオープンな業界標準のアプリケーションプロトコルです。Spring Boot は、準拠する LDAP サーバーの自動構成と、UnboundID (英語) の組み込みインメモリ LDAP サーバーのサポートを提供します。
LDAP 抽象化は Spring Data LDAP [GitHub] (英語) によって提供されます。依存関係を便利な方法で収集するための 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
(Javadoc) が自動構成されます。DirContextAuthenticationStrategy
(Javadoc) Bean が使用可能な場合は、自動構成された LdapContextSource
(Javadoc) に関連付けられます。PooledContextSource
(Javadoc) を使用するなどカスタマイズする必要がある場合でも、自動構成された LdapContextSource
(Javadoc) を挿入できます。自動構成された LdapTemplate
(Javadoc) がそれを使用するように、カスタマイズした ContextSource
(Javadoc) を @Primary
(Javadoc) としてフラグ付けしてください。
Spring Data LDAP リポジトリ
Spring Data には、LDAP のリポジトリサポートが含まれています。
リポジトリとドキュメントはスキャンによって検出されます。デフォルトでは、自動構成パッケージがスキャンされます。リポジトリとドキュメントを検索する場所をカスタマイズするには、それぞれ @EnableLdapRepositories
(Javadoc) と @EntityScan
(Javadoc) を使用します。
Spring Data LDAP の詳細については、リファレンスドキュメントを参照してください。 |
次の例に示すように、他の Spring Bean と同様に、自動構成された LdapTemplate
(Javadoc) インスタンスを挿入することもできます。
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 リスト表記を使用できます。プロパティファイルでは、プロパティ名の一部としてインデックスを含める必要があります。
|
デフォルトでは、サーバーはランダムなポートで起動し、通常の LDAP サポートをトリガーします。spring.ldap.urls
プロパティを指定する必要はありません。
クラスパスに schema.ldif
ファイルがある場合、サーバーの初期化に使用されます。別のリソースから初期化スクリプトをロードする場合は、spring.ldap.embedded.ldif
プロパティも使用できます。
デフォルトでは、LDIF
ファイルを検証するために標準スキーマが使用されます。spring.ldap.embedded.validation.enabled
プロパティを設定することにより、検証を完全にオフにできます。カスタム属性がある場合は、spring.ldap.embedded.validation.schema
を使用してカスタム属性型またはオブジェクトクラスを定義できます。