本文翻译自 :https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#boot-features-nosql
30. 使用NoSQL技术工作
Spring Data 提供了额外的工程帮助你访问多种NoSQL技术包括 MongoDB,Neo4J, Elasticsearch, Solr, Redis, Gemfire, Cassandra ,Couchbase 和LDAP 。Spring Boot 为Redis, MongoDB,Neo4j,Elasticsearch,Solr Cassandra, Couchbase 和LDAP提供了自动配置;你可以使用其他的工程,但需要自己配置。参考在projects.spring.io/spring-data上合适的参考手册。
30.1 Redis
spring-boot-starter-data-redis
起步。
30.1.1 连接Redis
RedisConnectionFactory
, StringRedisTemplate
或普通的RedisTemplate
实例。默认情况下,实例会尝试使用 localhost:6379
连接到Redis服务器:
@Component public class MyBean { private StringRedisTemplate template; @Autowired public MyBean(StringRedisTemplate template) { this.template = template; } // ... }如果你增加了你自己的自动配置类型的
@Bean
,它会替换默认的bean(除了使用 RedisTemplate
的情况,因为是根据bean的名字‘redisTemplate’而不是它的类型来排除的)。如果类路径上有 commons-pool2
,你通常会获得一个连接池工厂。
30.2 MongoDB
spring-boot-starter-data-mongodb
作为起步吧。
30.2.1 连接到MongoDB 数据库
org.springframework.data.mongodb.MongoDbFactory
来访问MongoDB数据库。通常实例会使用URL mongodb://localhost/test
来尝试连接到MongoDB服务端:
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或配置额外的设置例如灾备:
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
![]() |
|
![]() |
|
![]() |
你没有使用Spring Data MongoDB时,你可以注入 |
MongoDbFactory
或
Mongo
bean来获取创建MongoDB连接的完全控制。
30.2.2 MongoTemplate
JdbcTemplate
的 MongoTemplate
类。对于使用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; } // ... }查看
MongoOperations
Java文档获得所有细节。
30.2.3 Spring Data MongoDB库
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 findByNameAndCountryAllIgnoringCase(String name, String country); }
30.2.4 内嵌的Mongo
de.flapdoodle.embed:de.flapdoodle.embed.mongo
依赖。
spring.data.mongodb.port
属性来配置。要使用随机分配的未占用端口请将值改为0。MongoAutoConfiguration
创建的 MongoClient
将被自动配置为使用随机分配的端口。
![]() |
如果你没有自定义端口,内部支持默认将使用一个随机端口(而不是27017)。 |
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo
的logger中。你可以声明自己的 IMongodConfig
和IRuntimeConfig
beans来控制Mongo实例的配置和日志路由。
30.3 Neo4j
spring-boot-starter-data-neo4j
“Starter”。
30.3.1 连接到Neo4j数据库
Neo4jSession
, Session
或 Neo4jOperations
实例。通常实例会使用 localhost:7474
尝试连接到Neo4j服务:
@Component public class MyBean { private final Neo4jTemplate neo4jTemplate; @Autowired public MyBean(Neo4jTemplate neo4jTemplate) { this.neo4jTemplate = neo4jTemplate; } // ... }你可以通过增加
org.neo4j.ogm.config.Configuration
@Bean
获得配置的完全控制,也可以增加 Neo4jOperations
类型的 @Bean
来禁用自动配置。
spring.data.neo4j.*
属性配置用户和证书:
spring.data.neo4j.uri=http://my-server:7474 spring.data.neo4j.username=neo4j spring.data.neo4j.password=secret
30.3.2 使用内部模式
org.neo4j:neo4j-ogm-embedded-driver
Spring Boot会自动配置一个程序内部Neo4j实例,该实例在你应用关闭时不保存任何数据。你可以使用spring.data.neo4j.embedded.enabled=false
明确的禁用该模式,也可以开启内部模式的存储:
30.3.3 Neo4jSession
application.properties
中增加下述配置:
spring.data.neo4j.open-in-view=false
30.3.4 Spring Data Neo4j 库
City
现在是一个Neo4j OGM的@NodeEntity
而不是JPA的 @Entity
,它会使用同样的方式运行。
![]() |
你可以使用 |
@Transactional
的任意支持),增加下列两个注解到你的Spring配置上:
@EnableNeo4jRepositories(basePackages = "com.example.myapp.repository")
@EnableTransactionManagement
30.3.5 Repository 例子
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends GraphRepository<City> { Page<City> findAll(Pageable pageable); City findByNameAndCountry(String name, String country); }
![]() |
关于 Spring Data Neo4j完整资料,包括它丰富的对象映射技术,参考他们的参考手册 。 |
30.4 Gemfire
spring-boot-starter-data-gemfire
是一个可以方便的聚合所需依赖关系的“Starter”。当前没有对Gemfire的自动配置支持,但你可以使用Spring Data Repositories中唯一注解 (@EnableGemfireRepositories
) 来支持。
30.5 Solr
spring-boot-starter-data-solr
“Starter”来简单搜集要使用的依赖。
30.5.1 连接到 Solr
SolrClient
实例。默认这实例会使用 localhost:8983/solr
尝试连接到服务:
@Component public class MyBean { private SolrClient solr; @Autowired public MyBean(SolrClient solr) { this.solr = solr; } // ... }如果你增加了自己的
SolrClient
类型的 @Bean
,它会替换掉默认的bean。
30.5.2 Spring Data Solr repositories
City
现在是一个 @SolrDocument
类而不是JPA的 @Entity
,它将以同样的方式工作。
spring-boot-starter-data-elasticsearch
“Starter” 来方便聚集依赖的方式。Spring Boot也支持 Jest.。
30.6.1 使用Jest 连接到Elasticsearch
Jest
,你可注入一个自动配置的 JestClient
默认把localhost:9200
作为目标。你可以更进一步的调优客户端配置:
spring.elasticsearch.jest.uris=http://search.example.com:9200 spring.elasticsearch.jest.read-timeout=10000 spring.elasticsearch.jest.username=user spring.elasticsearch.jest.password=secret你也可以注册任意数量的实现
HttpClientConfigBuilderCustomizer
的beans来获得更多定制。下面的例子展示调整额外的HTTP设置:
static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer { @Override public void customize(HttpClientConfig.Builder builder) { builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5); } }为了充分控制注册,定义一个
JestClient
bean。
30.6.2 使用Spring Data 连接到Elasticsearch
ElasticsearchTemplate
或Elasticsearch Client
实例。通常实例或尝试嵌入一个本地内存服务(一个Elasticsearch 术语中的Node
)和使用当前工作目录作为服务的主目录。在该设置下,首先要告诉Elasticsearch 在哪里存储文件:
spring.data.elasticsearch.properties.path.home=/foo/bar
另外,你可以通过设置
spring.data.elasticsearch.cluster-nodes
为一个逗号分隔的“host:port”列表来切换到一个远程服务(即 TransportClient
):
spring.data.elasticsearch.cluster-nodes=localhost:9300
@Component public class MyBean { private ElasticsearchTemplate template; @Autowired public MyBean(ElasticsearchTemplate template) { this.template = template; } // ... }如果你增加了自己的
ElasticsearchTemplate
类型的 @Bean
,它将替换掉默认的。
30.6.3 Spring Data Elasticsearch 库
City
现在是一个Elasticsearch @Document
类而不是JPA @Entity
,它将以同样的方式运行。
30.7 Cassandra
spring-boot-starter-data-cassandra
“Starter”来方便的聚集依赖。
30.7.1 连接到 Cassandra
CassandraTemplate
或一个 Cassandra Session
实例。 spring.data.cassandra.*
属性用来定制连接。通常你需要提供keyspace-name
和contact-points
属性:spring.data.cassandra.keyspace-name=mykeyspace spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2
@Component public class MyBean { private CassandraTemplate template; @Autowired public MyBean(CassandraTemplate template) { this.template = template; } // ... }如果你增加了自己的
CassandraTemplate
类型的 @Bean
,它将替换掉默认的。
30.7.2 Spring Data Cassandra 库
@Query
注解。
30.8 Couchbase
spring-boot-starter-data-couchbase
“Starter” 为聚合依赖提供了方便。
30.8.1 连接到 Couchbase
Bucket
和Cluster
。 spring.couchbase.*
属性可以用来定制连接。通常你需要提供引导主机,bucket名和密码:
spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123 spring.couchbase.bucket.name=my-bucket spring.couchbase.bucket.password=secret
![]() |
你至少要提供引导主机,在此情况下bucket name是 |
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.*
属性获得更多细节。
30.8.2 Spring Data Couchbase 库
CouchbaseTemplate
实例只要默认的 CouchbaseConfigurer
可用(这种情况发生时,你可以向上述一样获得Couchbase的支持) 。
@Component public class MyBean { private final CouchbaseTemplate template; @Autowired public MyBean(CouchbaseTemplate template) { this.template = template; } // ... }下面这些beans你可以在你的配置类中定义来覆盖自动配置的beans:
- 一个名为
couchbaseTemplate
的CouchbaseTemplate
@Bean
- 一个名为
couchbaseIndexManager
的IndexManager
@Bean
- 一个名为
couchbaseCustomConversions
的CustomConversions
@Bean
BeanNames
。例如,你可以像下面一样定义这转换器:
@Configuration public class SomeConfiguration { @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) public CustomConversions myCustomConversions() { return new CustomConversions(...); } // ... }
![]() |
如果你想完全忽略为Spring Data Couchbase提供的自动配置,请提供你自己的 |
30.9 LDAP
spring-boot-starter-data-ldap
“Starter”提供了一种方便聚集所需依赖的方式。
30.9.1 连接到一个LDAP服务
spring-boot-starter-data-ldap
‘Starter’ 或 spring-ldap-core
依赖然后在你的
spring.ldap.urls=ldap://myserver:1235 spring.ldap.username=admin spring.ldap.password=secret如果你需要定制连接设置,你可以使用
spring.ldap.base
和
spring.ldap.base-environment
属性。
30.9.2 Spring Data LDAP 库
LdapTemplate
实例。
@Component public class MyBean { private final LdapTemplate template; @Autowired public MyBean(LdapTemplate template) { this.template = template; } // ... }
30.9.3 内部存储LDAP服务
com.unboundid:unboundid-ldapsdk
依赖和声明 base-dn
属性 :
spring.ldap.embedded.base-dn=dc=spring,dc=io
spring.ldap.urls
属性)。
schema.ldif
文件,它将用于初始化服务。你也可使用 spring.ldap.embedded.ldif
属性指定你想
LDIF
文件,你可以使用spring.ldap.embedded.validation.enabled
属性完全的关闭验证。
spring.ldap.embedded.validation.schema
来定义你自定义的属性类型或对象类。