SpringBoot 中文手册 --Part IV --30 使用NoSQL技术

本文翻译自 :https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#boot-features-nosql



30. 使用NoSQL技术工作

Spring Data 提供了额外的工程帮助你访问多种NoSQL技术包括 MongoDBNeo4J, 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

Redis是一个缓存,消息代理和功能丰富的键值对存储。Spring Boot 为Jedis客户端库提供了基本的自动配置和在Spring Data Redis之上的封装。为例方便聚集依赖,这里提供了 spring-boot-starter-data-redis 起步。

30.1.1 连接Redis
你可以像其他任何Spring Bean一样注入一个自动配置的 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

MongoDB是一个开源NoSQL,使用类JSON结构代替传统的基于表关系数据的文档数据库。Spring Boot 为使用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

[Note]

spring.data.mongodb.host 和 spring.data.mongodb.port 在使用 Mongo 3.0 Java驱动情况下不被支持。此时spring.data.mongodb.uri 应用来提供所有的配置。

[Tip]

 spring.data.mongodb.port 不指定时使用默认的 27017 。你可从上面的例子中删除这一行。

[Tip]

你没有使用Spring Data MongoDB时,你可以注入 com.mongodb.Mongo beans 代替食用 MongoDbFactory

你也可以声明自己的   MongoDbFactory  或  Mongo   bean来获取创建MongoDB连接的完全控制。

30.2.2 MongoTemplate
Spring Data Mong 提供了一个类似Spring中 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库
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 findByNameAndCountryAllIgnoringCase(String name, String country);

}

[Tip]

想了解 Spring Data MongoDB完整的细节,包括它丰富的对象映射技术,参考它的 reference documentation.


30.2.4 内嵌的Mongo
Spring Boot 为内嵌的Mongo提供自动配置。要在你的Spring Boot应用中使用,增加一个 de.flapdoodle.embed:de.flapdoodle.embed.mongo 依赖。

Mongo监听的端口可以使用 spring.data.mongodb.port 属性来配置。要使用随机分配的未占用端口请将值改为0。MongoAutoConfiguration 创建的 MongoClient 将被自动配置为使用随机分配的端口。

[Note]

如果你没有自定义端口,内部支持默认将使用一个随机端口(而不是27017)。


在类路径上发现 SLF4J,Mongo产生的输出将自动被路由到一个名为org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo 的logger中。你可以声明自己的 IMongodConfig 和IRuntimeConfig beans来控制Mongo实例的配置和日志路由。

30.3 Neo4j

Neo4j是一个开源NoSQL图形数据库,使用一个具有丰富数据的第一级关系叙述的节点模型,比传统的RDBMS更加适合连接大数据的处理。Spring Boot为使用Neo4j工作提供了一些便利,包含在spring-boot-starter-data-neo4j “Starter”。

30.3.1 连接到Neo4j数据库
你可以像注入任何其他Spring Bean一样注入一个自动配置的 Neo4jSessionSession 或 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 明确的禁用该模式,也可以开启内部模式的存储:
spring.data.neo4j.uri=file://var/tmp/graph.db
[Note]

Neo4j OGM 内部驱动不提供Neo4j核心,期望用户手动提供它的依赖,查阅 文档 了解更多。


30.3.3 Neo4jSession
通常,在你运行一个Web应用时,Session会绑定到整个请求过程的线程上(即“Open Session in View”模式)。如果你不想要此行为,在你的 application.properties 中增加下述配置:
spring.data.neo4j.open-in-view=false

30.3.4 Spring Data Neo4j 库
Spring Data包含了对Neo4j的支持库。

事实上,Spring Data JPA 和Spring Data Neo4j 共享相同的公共组件;所以你可把之前的JPA例子拿过来,假设 City 现在是一个Neo4j OGM的@NodeEntity 而不是JPA的 @Entity ,它会使用同样的方式运行。

[Tip]

你可以使用 @EntityScan 注解来定义实体扫描位置。


要开启支持库(和对 @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);

}

[Tip]

关于 Spring Data Neo4j完整资料,包括它丰富的对象映射技术,参考他们的参考手册 。


30.4 Gemfire

Spring Data Gemfire 提供了方便的Spring友好的工具来访问 Pivotal Gemfire数据管理平台。 spring-boot-starter-data-gemfire 是一个可以方便的聚合所需依赖关系的“Starter”。当前没有对Gemfire的自动配置支持,但你可以使用Spring Data Repositories中唯一注解 (@EnableGemfireRepositories) 来支持。

30.5 Solr

Apache Solr 是一个搜索引擎。Spring Boot 为Solr 5 客户端库提供基本的自动配置和由 Spring Data Solr提供的封装。这里有一个spring-boot-starter-data-solr “Starter”来简单搜集要使用的依赖。

30.5.1 连接到 Solr
你可以像使用任何其他Spring bean一样注入一个自动配置的 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
Spring Data包含了对Apache Solr的支持库。像前面讨论的JPA一样,基本原理就是根据方法名自动构造查询语句。

事实上,Spring Data JPA 和Spring Data Solr 共享相同的公共组件。因此你可以那之前的JPA例子使用,假设 City 现在是一个 @SolrDocument 类而不是JPA的  @Entity ,它将以同样的方式工作。

[Tip]

关于Spring Data Solr的完整细节参考他们的官方文档.



30.6 Elasticsearch

Elasticsearch是一个开源,分布式,实时搜索和分析引擎。Spring Boot为Elasticsearch 提供基本的自动配置支持和由Spring Data Elasticsearch 提供的封装。这是一个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
你可以像任何Spring bean一样注入一个自动配置的 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 库
Spring Data 包换对Elasticsearch支持的库。像前面讨论过的 JPA库一样,基本原理是基于方法名自动构建查询语句。

事实上,Spring Data JPA和Spring Data Elasticsearch 共享相同的公共组件,因此你拿前面的JPA例子来讲就是,假设 City 现在是一个Elasticsearch @Document 类而不是JPA  @Entity ,它将以同样的方式运行。

[Tip]

关于Spring Data Elasticsearch的完整细节参考他们的官方文档


30.7 Cassandra

Cassandra是一个开源,分布式数据库管理系统设计来处理很多商用服务上的大量数据。Spring Boot为Cassandra 提供了基本的自动配置支持和在Spring Data Cassandra之上的封装。这里提供spring-boot-starter-data-cassandra “Starter”来方便的聚集依赖。

30.7.1 连接到 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
@Component
public class MyBean {

    private CassandraTemplate template;

    @Autowired
    public MyBean(CassandraTemplate template) {
        this.template = template;
    }

    // ...

}
 如果你增加了自己的   CassandraTemplate  类型的 @Bean ,它将替换掉默认的。

30.7.2 Spring Data Cassandra 库
Spring Data 包含对Cassandra支持的基本库。目前它和之前讨论的JPA库相比有些限制,我们需要在查询方法上使用 @Query 注解。

[Tip]

对于Spring Data Cassandra的完整详情,请参考他们的官方手册


30.8 Couchbase

Couchbase是一个开源,分布式多模型的NoSQL文档型数据库,非常适合交互式的应用。Spring Boot为Couchbase 提供了基本的自动配置和在Spring Data Couchbase之前的封装。spring-boot-starter-data-couchbase “Starter” 为聚合依赖提供了方便。

30.8.1 连接到 Couchbase
你可以通过增加Couchbase SDK和一些配置很容易得获得 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

[Tip]

你至少要提供引导主机,在此情况下bucket name是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.*  属性获得更多细节。

30.8.2 Spring Data Couchbase 库
Spring Data包含了对Couchbase支持的库。关于Spring Data Couchbase的完整细节可以参考他们的官方手册

你可以像使用任何其他Spring bean一样注入自动配置的 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 
  • 一个名为 couchbaseCustomConversionsCustomConversions @Bean 
为了避免在你的配置中辛苦的编写名字,你可以继续使用Spring Data Couchbase提供的   BeanNames  。例如,你可以像下面一样定义这转换器:
@Configuration
public class SomeConfiguration {

    @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
    public CustomConversions myCustomConversions() {
        return new CustomConversions(...);
    }

    // ...

}

[Tip]

如果你想完全忽略为Spring Data Couchbase提供的自动配置,请提供你自己的org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration 实现。


30.9 LDAP

LDAP (Lightweight Directory Access Protocol 轻量级目录访问协议)是一个开放,供应商中立的,行业标准的应用协议,用于在IP网络上
访问和维护分布式目录信息服务。Spring Boot为任何兼容LDAP的服务提供自动配置,就像对使用 UnboundID 的内部存储LDAP服务器的支持一样。

LDAP 封装由Spring Data LDAP提供。spring-boot-starter-data-ldap “Starter”提供了一种方便聚集所需依赖的方式。

30.9.1 连接到一个LDAP服务
为了连接到LDAP服务器,请确保你声明了spring-boot-starter-data-ldap ‘Starter’ 或 spring-ldap-core 依赖然后在你的
application.properties 中 声明了你的服务URLs:
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 库
Spring Data 包含对LDAP支持的库。要获得Spring Data LDAP完整细节,参考他们的官方手册

你也可以像任何其他Spring bean一样注入一个自动配置的 LdapTemplate 实例。
@Component
public class MyBean {

    private final LdapTemplate template;

    @Autowired
    public MyBean(LdapTemplate template) {
        this.template = template;
    }

    // ...

}

30.9.3 内部存储LDAP服务
对于测试,Spring Boot为来自UnboundID的内存式LDAP服务器提供了自动配置支持。要配置该服务器,需要增加
 com.unboundid:unboundid-ldapsdk 依赖和声明 base-dn 属性
spring.ldap.embedded.base-dn=dc=spring,dc=io

通常,服务会在一个随机端口启动,他们会触发LDAP支持的规则(不需要指定 spring.ldap.urls 属性)。

如果你的类路径上存在 schema.ldif 文件,它将用于初始化服务。你也可使用 spring.ldap.embedded.ldif 属性指定你想
从其他位置加载的初始化脚本。

通常一个标准模式会被用来验证 LDIF 文件,你可以使用spring.ldap.embedded.validation.enabled 属性完全的关闭验证。
如果你有自定义的属性,你可以使用 spring.ldap.embedded.validation.schema 来定义你自定义的属性类型或对象类。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合GeoMesa Cassandra是为了利用GeoMesa库的强大地理空间处理能力,与Cassandra NoSQL数据库结合,以便在Spring应用中方便地执行地理数据的CRUD操作。GeoMesa是一个高度可扩展的开源框架,它抽象了底层的数据存储,使得开发者能够更专注于业务逻辑。 以下是整合步骤: 1. 添加依赖: 在你的`pom.xml`文件中添加GeoMesa和Spring Data Cassandra的依赖: ```xml <dependency> <groupId>org.locationtech.geomesa</groupId> <artifactId>geomesa-spring-boot-starter-cassandra</artifactId> <version>XX.YY.ZZ</version> <!-- 用最新版本替换 --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-cassandra</artifactId> </dependency> ``` 记得替换版本号为最新的稳定版。 2. 配置GeoMesa Cassandra:在`application.properties`或`application.yml`中配置Cassandra连接信息,包括主机、端口、用户名、密码等。 3. 创建数据源:在Spring Boot应用中,使用Spring Data Cassandra的Repository接口来定义地理空间数据源。例如,假设你有一个`Feature`实体映射到GeoMesa中的一个表,你可以创建一个类似这样的Repository接口: ```java public interface FeatureRepository extends GeoMesaFeatureDao<Feature, UUID> { // CRUD operations List<Feature> findByBbox(BoundingBox bbox); Feature findById(UUID id); void save(Feature feature); void deleteById(UUID id); } ``` 4. 使用Repository:注入`FeatureRepository`并进行CRUD操作: ```java @Autowired private FeatureRepository featureRepository; public void createFeature(Feature feature) { featureRepository.save(feature); } public Feature getFeatureById(UUID id) { return featureRepository.findById(id); } public void updateFeature(Feature updatedFeature) { featureRepository.save(updatedFeature); } public void deleteFeature(UUID id) { featureRepository.deleteById(id); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值