Spring Boot 参考指南(使用NoSQL技术)

30. 使用NoSQL技术

Spring Data提供了额外的项目,帮助你访问各种NoSQL技术,包括:MongoDBNeo4JElasticsearchSolrRedisGemfireCassandraCouchbaseLDAP。Spring Boot为Redis、MongoDB、Neo4j、Elasticsearch、Solr Cassandra、Couchbase和LDAP提供了自动配置,你可以使用其他项目,但是你必须自己配置它们,请参阅projects.spring.io/spring-data的适当参考文档。

30.1 Redis

Redis是一个缓存、消息代理和功能丰富的键值存储,Spring Boot提供了LettuceJedis客户端库的基本自动配置,以及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一样注入自动配置的RedisConnectionFactoryStringRedisTemplate或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列表的地址。有了这个配置,一个ElasticsearchTemplateTransportClient就可以像其他任何Spring bean一样被注入,如下面的示例所示:

spring.data.elasticsearch.cluster-nodes=localhost:9300
@Component
public class MyBean {

    private final ElasticsearchTemplate template;

    public MyBean(ElasticsearchTemplate template) {
        this.template = template;
    }

    // ...

}

如果你添加自己的ElasticsearchTemplateTransportClient @Bean,它会替换默认。

30.6.3 Spring Data Elasticsearch存储库

Spring Data包括对Elasticsearch的存储库支持,与前面讨论的JPA存储库一样,基本原则是根据方法名称为你自动构造查询。

事实上,Spring Data JPA和Spring Data Elasticsearch共享相同的公共基础设施,你可以以前面的JPA示例为例,假设City现在是Elasticsearch @Document类,而不是JPA @Entity,它的工作方式是相同的。

有关Spring Data Elasticsearch的详细信息,请参阅参考文档

相关推荐