Spring Boot 参考指南(使用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
Redis是一个缓存、消息代理和功能丰富的键值存储,Spring Boot提供了Lettuce和Jedis客户端库的基本自动配置,以及Spring Data Redis提供的在它们之上的抽象。
有一个spring-boot-starter-data-redis
“Starter”,可以方便地收集依赖项,默认情况下,它使用Lettuce,该starter同时处理传统应用程序和reactive应用程序。
spring-boot-starter-data-redis-reactive
“Starter”,以便与具有reactive支持的其他存储保持一致。30.1.1 连接到Redis
可以像注入任何其他Spring Bean一样注入自动配置的RedisConnectionFactory
、StringRedisTemplate
或vanilla RedisTemplate
实例,默认情况下,该实例试图连接到localhost:6379
上的Redis服务器,下面的清单显示了这样一个bean的示例:
@Component public class MyBean { private StringRedisTemplate template; @Autowired public MyBean(StringRedisTemplate template) { this.template = template; } // ... }
你还可以注册任意数量的bean,这些bean实现LettuceClientConfigurationBuilderCustomizer
用于更高级的定制,如果你使用Jedis,也可以使用JedisClientConfigurationBuilderCustomizer
。
如果你添加了任何自动配置类型的自己的@Bean
,它替换默认值(在RedisTemplate
的情况下除外,当排除值是基于bean名称时,则替换为RedisTemplate
,而不是它的类型),默认情况下,如果commons-pool2
在类路径上,就会得到一个连接池工厂。
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
你还可以注册任意数量的bean,这些bean实现HttpClientConfigBuilderCustomizer
,用于更高级的定制,下面的示例调优其他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
要连接到Elasticsearch,必须提供一个或多个集群节点的地址,可以通过设置spring.data.elasticsearch.cluster-nodes
属性来指定一个逗号分隔的host:port
列表的地址。有了这个配置,一个ElasticsearchTemplate
或TransportClient
就可以像其他任何Spring bean一样被注入,如下面的示例所示:
spring.data.elasticsearch.cluster-nodes=localhost:9300
@Component public class MyBean { private final ElasticsearchTemplate template; public MyBean(ElasticsearchTemplate template) { this.template = template; } // ... }
如果你添加自己的ElasticsearchTemplate
或TransportClient
@Bean
,它会替换默认。
30.6.3 Spring Data Elasticsearch存储库
Spring Data包括对Elasticsearch的存储库支持,与前面讨论的JPA存储库一样,基本原则是根据方法名称为你自动构造查询。
事实上,Spring Data JPA和Spring Data Elasticsearch共享相同的公共基础设施,你可以以前面的JPA示例为例,假设City现在是Elasticsearch @Document
类,而不是JPA @Entity
,它的工作方式是相同的。