Spring Data提供了其餘項目來幫助您訪問各類NoSQL
技術,包括:html
Spring Boot爲Redis
,MongoDB
,Neo4j
,Elasticsearch
,Solr
, Cassandra
,Couchbase
和LDAP
提供自動配置。您可使用其餘項目,但必須本身進行配置。請參閱相應的參考文檔。java
Redis是一個緩存,消息代理和功能豐富的鍵值存儲。Spring Boot爲Lettuce
和Jedis
客戶端庫以及Spring Data Redis爲Lettuce和Jedis提供的最基本的抽象,提供了基本的自動配置。react
spring-boot-starter-data-redis
啓動器能夠方便地收集依賴關係。默認狀況下,它使用 Lettuce
。該啓動程序能夠處理傳統應用程序和響應式應用程序。web
咱們還提供了一個spring-boot-starter-data-redis-reactive
啓動器,可與其餘存儲保持一致,並提供響應性支持。redis
您能夠像注入其餘任何Spring Bean同樣注入自動配置的RedisConnectionFactory
,StringRedisTemplate
或Vanilla RedisTemplate
實例。默認狀況下,實例嘗試鏈接到Redis服務器localhost:6379
。下面的清單顯示了這種Bean的示例:spring
@Component public class MyBean { private StringRedisTemplate template; @Autowired public MyBean(StringRedisTemplate template) { this.template = template; } // ... }
您還能夠註冊任意數量的實現LettuceClientConfigurationBuilderCustomizer
的Bean,以使用更高級的自定義。若是您使用Jedis
,JedisClientConfigurationBuilderCustomizer
也可使用。sql
若是添加本身任何一種自動配置類型的@Bean,它將替換默認類型(除非是RedisTemplate
,當基於Bean名稱redisTemplate
而不是其類型排除時)。默認狀況下,若是commons-pool2
在類路徑上,則會獲得一個池化鏈接工廠。mongodb
MongoDB是一個開源NoSQL文檔數據庫,它使用相似JSON的架構而不是傳統的基於表的關係數據。Spring Boot爲MongoDB的使用提供了許多便利,包括spring-boot-starter-data-mongodb
和spring-boot-starter-data-mongodb-reactive
啓動器。數據庫
要訪問Mongo數據庫,您能夠注入自動配置的org.springframework.data.mongodb.MongoDbFactory
。默認狀況下,該實例嘗試經過mongodb://localhost/test
鏈接到MongoDB服務器。如下示例顯示瞭如何鏈接到MongoDB數據庫:bootstrap
import org.springframework.data.mongodb.MongoDbFactory; import com.mongodb.DB; @Component public class MyBean { private final MongoDbFactory mongo; @Autowired public MyBean(MongoDbFactory mongo) { this.mongo = mongo; } // ... public void example() { DB db = mongo.getDb(); // ... } }
您能夠設置spring.data.mongodb.uri
屬性來更改URL並配置其餘設置,例如replica set
,如如下示例所示:
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test
另外,只要您使用Mongo 2.x,就能夠指定 host/port
。例如,您能夠在application.properties中聲明如下設置:
spring.data.mongodb.host=mongoserver spring.data.mongodb.port=27017
若是定義了本身的MongoClient
,它將用於自動配置合適的MongoDbFactory
。支持com.mongodb.MongoClient
和com.mongodb.client.MongoClient
。
若是使用Mongo3.0 Java驅動程序,spring.data.mongodb.host
和spring.data.mongodb.port
不支持。在這種狀況下,應使用spring.data.mongodb.uri
來提供全部配置。
若是spring.data.mongodb.port
未指定,則使用默認值27017
。
若是您不使用Spring Data Mongo,則能夠注入com.mongodb.MongoClient
bean而不是使用MongoDbFactory
。若是要徹底控制創建MongoDB鏈接的方式,則也能夠聲明本身的MongoDbFactory
或MongoClient
bean。
若是您使用響應式驅動程序,則SSL
須要Netty
。若是可使用Netty而且還沒有自定義要使用的工廠,則自動配置會自動配置該工廠。
Spring Data MongoDB提供的MongoTemplate
類在設計上與Spring的JdbcTemplate
很是類似。與JdbcTemplate同樣,Spring Boot爲您自動配置一個Bean來注入,以下所示:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class MyBean { private final MongoTemplate mongoTemplate; @Autowired public MyBean(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } // ... }
Spring Data包括對MongoDB的存儲庫支持。與前面討論的JPA存儲庫同樣,基本原理是根據方法名稱自動構造查詢。
實際上,Spring Data JPA和Spring Data MongoDB共享相同的通用基礎架構。您能夠從之前的JPA示例開始,並假設City如今是Mongo數據類而不是JPA @Entity,它的工做方式相同,如如下示例所示:
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndStateAllIgnoringCase(String name, String state); }
您可使用@EntityScan
註解來自定義文檔掃描位置。
Spring Boot爲Embedded Mongo提供自動配置。要在您的Spring Boot應用程序中使用它,請添加de.flapdoodle.embed:de.flapdoodle.embed.mongo
依賴。
能夠經過設置spring.data.mongodb.port
屬性來配置Mongo偵聽的端口。要使用隨機分配的空閒端口,請使用值0
。MongoAutoConfiguration
建立的MongoClient
被自動配置爲使用隨機分配的端口。
若是未配置自定義端口,則默認狀況下,嵌入式支持會使用隨機端口
(而不是27017
)。
若是類路徑上有SLF4J
,則Mongo產生的輸出將自動路由到名爲org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo
的記錄器。
您能夠聲明本身的IMongodConfig
和IRuntimeConfig
bean來控制Mongo實例的配置和日誌記錄路由。能夠經過聲明DownloadConfigBuilderCustomizer
bean 來定製下載配置。
Neo4j是一個開源NoSQL圖形數據庫,它使用經過一級關係鏈接的節點的豐富數據模型,與傳統的RDBMS方法相比,它更適合於鏈接大數據。Spring Boot爲Neo4j的使用提供了許多便利,包括spring-boot-starter-data-neo4j
啓動器。
要訪問Neo4j服務器,您能夠注入自動配置的org.neo4j.ogm.session.Session
。默認狀況下,實例嘗試localhost:7687
使用Bolt
協議鏈接到Neo4j
服務器。如下示例顯示如何注入Neo4j Session:
@Component public class MyBean { private final Session session; @Autowired public MyBean(Session session) { this.session = session; } // ... }
您能夠經過設置spring.data.neo4j.*
屬性來配置要使用的uri和憑據,如如下示例所示:
spring.data.neo4j.uri=bolt://my-server:7687 spring.data.neo4j.username=neo4j spring.data.neo4j.password=secret
您能夠經過添加org.neo4j.ogm.config.Configuration
bean或org.neo4j.ogm.session.SessionFactory
bean 來徹底控制會話的建立。
若是添加org.neo4j:neo4j-ogm-embedded-driver
到應用程序的依賴項,Spring Boot會自動配置Neo4j的進程內嵌入式實例,該實例在應用程序關閉時不會保留任何數據。
因爲嵌入式Neo4j OGM驅動程序自己不提供Neo4j內核,所以您必須本身聲明org.neo4j:neo4j
爲依賴項。有關兼容版本的列表,請參閱Neo4j OGM文檔。
當類路徑上有多個驅動程序時,嵌入式驅動程序優先於其餘驅動程序。您能夠經過設置spring.data.neo4j.embedded.enabled=false
顯式禁用嵌入式模式。
若是嵌入式驅動程序和Neo4j內核位於上述類路徑上,則Data Neo4j Tests會自動使用嵌入式Neo4j實例。
您能夠經過在配置中提供數據庫文件的路徑來啓用嵌入式模式的持久性,例如,spring.data.neo4j.uri=file://var/tmp/graph.db
。
Neo4j-OGM能夠將某些類型(例如java.time.*
中的類型)映射到基於String屬性或Neo4j提供的原生類型之一。出於向後兼容的緣由,Neo4j-OGM的默認設置是使用基於String的表示形式。要使用原生類型,請添加依賴項org.neo4j:neo4j-ogm-bolt-native-types
或org.neo4j:neo4j-ogm-embedded-native-types
,並配置spring.data.neo4j.use-native-types
屬性,如如下示例所示:
spring.data.neo4j.use-native-types=true
默認狀況下,若是您正在運行Web應用程序,則會話將綁定到線程以進行請求的整個處理(即,它使用「在視圖中打開會話」模式)。若是您不但願出現這種狀況,請將如下行添加到您的application.properties文件中:
spring.data.neo4j.open-in-view=false
Spring Data包括對Neo4j的存儲庫支持。
Spring Data Neo4j與許多其餘Spring Data模塊同樣,與Spring Data JPA共享公共基礎結構。您可使用之前的JPA示例,並將City定義爲Neo4j OGM @NodeEntity
而不是JPA @Entity,而且存儲庫抽象以相同的方式工做,如如下示例所示:
package com.example.myapp.domain; import java.util.Optional; import org.springframework.data.neo4j.repository.*; public interface CityRepository extends Neo4jRepository<City, Long> { Optional<City> findOneByNameAndState(String name, String state); }
spring-boot-starter-data-neo4j
啓動器啓用對存儲庫的支持以及事務管理。您能夠經過在@Configuration
bean 上分別使用@EnableNeo4jRepositories
和@EntityScan
來定製查找存儲庫和實體的位置。
有關Spring Data Neo4j的完整詳細信息,包括其對象映射技術,請參閱參考文檔。
Apache Solr是一個搜索引擎。Spring Boot爲Solr 5客戶端庫提供了基本的自動配置,並由Spring Data Solr在其之上提供了抽象。spring-boot-starter-data-solr
「啓動器」能夠方便地收集依賴關係。
您能夠像注入其餘任何Spring Bean同樣注入自動配置的SolrClient
實例。默認狀況下,該實例嘗試localhost:8983/solr
鏈接到服務器。如下示例顯示如何注入Solr bean:
@Component public class MyBean { private SolrClient solr; @Autowired public MyBean(SolrClient solr) { this.solr = solr; } // ... }
若是添加本身的SolrClient
@Bean,它將替換默認值。
Spring Data包括對Apache Solr的存儲庫支持。與前面討論的JPA存儲庫同樣,基本原理是根據方法名稱自動爲您構建查詢。
實際上,Spring Data JPA和Spring Data Solr共享相同的通用基礎結構。您能夠從之前的JPA示例開始,假設如今City是一個@SolrDocument
類,而不是JPA @Entity,它的工做方式相同。
Elasticsearch
是一個開源,分佈式,RESTful搜索和分析引擎。Spring Boot爲Elasticsearch提供了基本的自動配置。
Spring Boot支持多個客戶端:
ReactiveElasticsearchClient
傳輸客戶端仍然可用,可是Spring Data Elasticsearch和Elasticsearch自己已棄用了它的支持。它將在未來的版本中刪除。Spring Boot提供了專用的 spring-boot-starter-data-elasticsearch
啓動器。
因爲Elasticsearch和Spring Data Elasticsearch爲REST客戶端提供了官方支持,所以Jest客戶端也已被棄用。
Elasticsearch附帶了兩個可用於查詢集羣的REST客戶端:「低級」客戶端和「高級」客戶端。
若是類路徑上有org.elasticsearch.client:elasticsearch-rest-client
依賴,Spring Boot將自動配置並註冊一個RestClient
bean 默認爲localhost:9200
的target。您能夠進一步調整RestClient
配置方式,如如下示例所示:
spring.elasticsearch.rest.uris=https://search.example.com:9200 spring.elasticsearch.rest.read-timeout=10s spring.elasticsearch.rest.username=user spring.elasticsearch.rest.password=secret
您還能夠註冊任意數量的RestClientBuilderCustomizer
Bean,以實現更高級的自定義。要徹底控制註冊,請定義一個RestClient
bean。
若是類路徑有org.elasticsearch.client:elasticsearch-rest-high-level-client
依賴,Spring Boot將自動配置一個RestHighLevelClient
,包裝現有的RestClient
bean,從新使用其HTTP配置。
Spring Data Elasticsearch附帶的ReactiveElasticsearchClient
實例以響應方式查詢Elasticsearch實例。它創建在WebFlux的WebClient
基礎上,所以spring-boot-starter-elasticsearch
和spring-boot-starter-webflux
依賴項對於啓用此支持都是有用的。
默認狀況下,Spring Boot將自動配置並註冊一個ReactiveElasticsearchClient
bean 做爲localhost:9200
的target 。您能夠進一步調整其配置,如如下示例所示:
spring.data.elasticsearch.client.reactive.endpoints=search.example.com:9200 spring.data.elasticsearch.client.reactive.use-ssl=true spring.data.elasticsearch.client.reactive.socket-timeout=10s spring.data.elasticsearch.client.reactive.username=user spring.data.elasticsearch.client.reactive.password=secret
若是配置屬性不夠,而且您想徹底控制客戶端配置,則能夠註冊一個自定義ClientConfiguration
bean。
如今,Spring Boot支持官方的RestHighLevelClient
,已廢棄Jest支持。
若是Jest在類路徑上,則能夠注入默認狀況下目標爲localhost:9200
的自動配置的JestClient
。您能夠進一步調整客戶端的配置方式,如如下示例所示:
spring.elasticsearch.jest.uris=https://search.example.com:9200 spring.elasticsearch.jest.read-timeout=10000 spring.elasticsearch.jest.username=user spring.elasticsearch.jest.password=secret
您還能夠註冊任意數量的HttpClientConfigBuilderCustomizer
Bean,以實現更高級的自定義。如下示例調整其餘HTTP設置:
static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer { @Override public void customize(HttpClientConfig.Builder builder) { builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5); } }
要徹底控制註冊,請定義一個JestClient
bean。
要鏈接到Elasticsearch,必須定義一個RestHighLevelClient
bean,它由Spring Boot自動配置或由應用程序手動提供(請參閱前面的部分)。有了此配置後,ElasticsearchRestTemplate
能夠像其餘任何Spring bean同樣被注入 ,如如下示例所示:
@Component public class MyBean { private final ElasticsearchRestTemplate template; public MyBean(ElasticsearchRestTemplate template) { this.template = template; } // ... }
在存在spring-data-elasticsearch
和使用WebClient
(一般爲spring-boot-starter-webflux
)所需的依賴項的狀況下,Spring Boot還能夠自動配置ReactiveElasticsearchClient
和ReactiveElasticsearchTemplateas
Bean。它們與其餘REST客戶端是等效的。
Spring Data包括對Elasticsearch的存儲庫支持。與前面討論的JPA存儲庫同樣,基本原理是根據方法名稱自動爲您構造查詢。
實際上,Spring Data JPA和Spring Data Elasticsearch共享相同的通用基礎架構。您能夠從之前的JPA示例開始,假設如今City是Elasticsearch @Document類而不是JPA @Entity,它的工做方式相同。
Spring Boot使用ElasticsearchRestTemplate
或ReactiveElasticsearchTemplate
bean 支持經典和反應式Elasticsearch存儲庫。給定所需的依賴項,最有可能由Spring Boot自動配置這些bean。
若是您但願使用本身的模板來支持Elasticsearch存儲庫,則能夠添加本身的ElasticsearchRestTemplate
或ElasticsearchOperations
@Bean(只要命名爲elasticsearchTemplate
)。一樣適用於ReactiveElasticsearchTemplate
和ReactiveElasticsearchOperations
,Bean名稱爲reactiveElasticsearchTemplate
。
您能夠選擇使用如下屬性禁用存儲庫支持:
spring.data.elasticsearch.repositories.enabled=false
Cassandra是一個開源的分佈式數據庫管理系統,旨在處理許多商用服務器上的大量數據。Spring Boot爲Cassandra提供自動配置,並由Spring Data Cassandra在其之上提供抽象。spring-boot-starter-data-cassandra
「啓動器」能夠方便地收集依賴關係。
您能夠像使用其餘任何Spring Bean同樣注入自動配置的CassandraTemplate
實例或Cassandra Session實例。spring.data.cassandra.*
屬性可用於自定義鏈接。一般,您提供keyspace-name
和contact-points
屬性,如如下示例所示:
spring.data.cassandra.keyspace-name=mykeyspace spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2
您還能夠註冊任意數量的ClusterBuilderCustomizer
Bean,以實現更高級的自定義。
如下代碼顯示瞭如何注入Cassandra
bean:
@Component public class MyBean { private CassandraTemplate template; @Autowired public MyBean(CassandraTemplate template) { this.template = template; } // ... }
若是添加本身的CassandraTemplate
@Bean,它將替換默認值。
Spring Data包括對Cassandra的基本存儲庫支持。當前,此功能比前面討論的JPA存儲庫更受限制,須要使用@Query
來註解finder方法。
Couchbase是一個開源,分佈式,多模型的NoSQL面向文檔的數據庫,已針對交互式應用程序進行了優化。Spring Boot爲Couchbase提供自動配置,並由Spring Data Couchbase在其之上提供抽象。spring-boot-starter-data-couchbase
和spring-boot-starter-data-couchbase-reactive
「啓動器」方便的收集依賴關係。
您能夠經過添加Couchbase SDK和一些配置來得到Bucket和Cluster。spring.couchbase.*
屬性可用於自定義鏈接。一般,您提供bootstrap主機,bucket名稱和密碼,如如下示例所示:
spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123 spring.couchbase.bucket.name=my-bucket spring.couchbase.bucket.password=secret
您至少須要提供bootstrap主機,在這種狀況下,bucket名稱爲default,密碼爲空字符串。另外,您能夠定義本身的org.springframework.data.couchbase.config.CouchbaseConfigurer
@Bean來控制整個配置。
也能夠自定義某些CouchbaseEnvironment
設置。例如,如下配置更改了用於打開新Bucket並啓用SSL支持的超時:
spring.couchbase.env.timeouts.connect=3000 spring.couchbase.env.ssl.key-store=/location/of/keystore.jks spring.couchbase.env.ssl.key-store-password=secret
檢查spring.couchbase.env.*
屬性以獲取更多詳細信息。
Spring Data包括對Couchbase的存儲庫支持。
您能夠像使用任何其餘Spring Bean同樣注入自動配置的CouchbaseTemplate
實例,前提是默認的 CouchbaseConfigurer
可使用(如前所述,啓用Couchbase支持時會發生這種狀況)。
如下示例顯示瞭如何注入Couchbase
bean:
@Component public class MyBean { private final CouchbaseTemplate template; @Autowired public MyBean(CouchbaseTemplate template) { this.template = template; } // ... }
您能夠在本身的配置中定義一些Bean,以覆蓋自動配置提供的那些:
couchbaseTemplate
的CouchbaseTemplate
@BeancouchbaseIndexManager
的IndexManager
@BeancouchbaseCustomConversions
的CustomConversions
@Bean爲了不在您本身的配置中對這些名稱進行硬編碼,您能夠重複使用Spring Data Couchbase提供的BeanNames
。例如,您能夠自定義要使用的轉換器,以下所示:
@Configuration(proxyBeanMethods = false) public class SomeConfiguration { @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) public CustomConversions myCustomConversions() { return new CustomConversions(...); } // ... }
若是您想徹底繞過Spring Data Couchbase的自動配置,請提供您本身的org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration
實現。
LDAP(輕量級目錄訪問協議)是一種開放的,與供應商無關的行業標準應用協議,用於經過IP網絡訪問和維護分佈式目錄信息服務。Spring Boot爲任何兼容的LDAP服務器提供自動配置,並使用UnboundID
支持嵌入式內存LDAP服務器。
LDAP抽象由Spring Data LDAP提供。spring-boot-starter-data-ldap
「啓動器」能夠方便地收集依賴關係。
要鏈接到LDAP服務器,請確保聲明spring-boot-starter-data-ldap
「啓動器」 或spring-ldap-core
,而後在application.properties中聲明服務器的URL,如如下示例所示:
spring.ldap.urls=ldap://myserver:1235 spring.ldap.username=admin spring.ldap.password=secret
若是須要自定義鏈接設置,可使用spring.ldap.base
和spring.ldap.base-environment
屬性。
將根據這些設置自動配置LdapContextSource
。若是您須要對其進行自定義(例如爲了使用PooledContextSource
),則仍能夠注入自動配置的LdapContextSource。確保將您的定製ContextSource標記爲@Primary
,以便自動配置的LdapTemplate
使用它。
Spring Data包括對LDAP的存儲庫支持。。
您還能夠像使用其餘任何Spring Bean同樣注入自動配置的LdapTemplate
實例,如如下示例所示:
@Component public class MyBean { private final LdapTemplate template; @Autowired public MyBean(LdapTemplate template) { this.template = template; } // ... }
出於測試目的,Spring Boot支持使用UnboundID自動配置內存中的LDAP服務器。要配置服務器,請添加依賴項com.unboundid:unboundid-ldapsdk
並聲明spring.ldap.embedded.base-dn
屬性,以下所示:
spring.ldap.embedded.base-dn=dc=spring,dc=io
能夠定義多個base-dn
值,可是,因爲可分辨的名稱一般包含逗號,所以必須使用正確的符號來定義它們。
在yaml文件中,您可使用:
spring.ldap.embedded.base-dn: - dc=spring,dc=io - dc=pivotal,dc=io
在properties文件中,必須將索引包括在屬性名稱中:
spring.ldap.embedded.base-dn[0]=dc=spring,dc=io spring.ldap.embedded.base-dn[1]=dc=pivotal,dc=io
默認狀況下,服務器在隨機端口上啓動並觸發常規LDAP支持。無需指定spring.ldap.urls
屬性。
若是您的類路徑中有一個schema.ldif
文件,它將用於初始化服務器。若是要從其餘資源加載初始化腳本,則也可使用spring.ldap.embedded.ldif
屬性。
默認狀況下,使用標準模式來驗證LDIF文件。您能夠經過設置spring.ldap.embedded.validation.enabled
屬性來徹底關閉驗證。若是您具備定製屬性,則能夠用spring.ldap.embedded.validation.schema
來定義定製屬性類型或對象類。
InfluxDB是一個開源的時間序列數據庫,已優化用於在操做監視,應用程序度量,物聯網傳感器數據和實時分析等領域中快速,高可用性地存儲和檢索時間序列數據。
若是influxdb-java
客戶端位於類路徑上而且設置了數據庫的URL,Spring Boot會自動配置一個InfluxDB實例,如如下示例所示:
spring.influx.url=https://172.0.0.1:8086
若是與InfluxDB的鏈接須要用戶和密碼,則能夠相應地設置spring.influx.user
和spring.influx.password
屬性。
InfluxDB依賴OkHttp
。若是須要在後臺調整http客戶端InfluxDB的使用,則能夠註冊一個InfluxDbOkHttpClientBuilderProvider
bean。