最近公司领导让我研发使用rabbitMq 通过 logstash 将数据传输保存到elasticsearch的需求。
工作刚刚忙完,公司用的主要框架是spring boot。
下面跟小伙伴们分享一下,spring boot 集成 elasticsearchs 的详细配置。
以下是spring boot 的官网,如果时间不紧的小伙伴可以先研究下官网的文档,尝试一下自己摸索。
https://docs.spring.io/spring-data/elasticsearch/docs/3.2.6.RELEASE/reference/html/#reference
下面这张图是spring features 里面的
好了,现在开始给大家分享一下我自己项目里spring boot 整合elasticearch的例子。
这里我的项目是使用spring boot 2.2.x版本的,因为spring boot elasticsearch对版本是有要求的,为了大家避免踩坑
大家可以参照以下spring boot 官网 es 对应 spring boot 的版本
第一步:
在spring boot 配置文件 application.yml 或 application.properties以下配置:
#elasticsearch
spring.elasticsearch.rest.uris=elasticsearch的ip:9200
spring.elasticsearch.rest.username=elastic (这个账号名 elastic 是默认的账号名称)
spring.elasticsearch.rest.password=ea密码
spring.data.elasticsearch.repositories.enabled=true
下面的图片是spring boot官网的图片,大家可以看一下。
elasticsearch 有几个类型的客户端,大家如果不是使用restClient的话可以自行去spring boot 官网查看各个客户端的配置项。
第二部:
在项目中新建配置类,添加 spring boot 操作elasticsearch api的对象类。
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Value("${spring.elasticsearch.rest.uris}")
private String hostAndPort;
@Override
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(hostAndPort)
.withConnectTimeout(Duration.ofSeconds(5))
.withSocketTimeout(Duration.ofSeconds(3))
.withBasicAuth("elastic", "es密码")
.build();
return RestClients.create(clientConfiguration).rest();
}
// use the ElasticsearchEntityMapper
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(elasticsearchMappingContext(),
new DefaultConversionService());
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
}
到此整合完成。大家可以在代码中注入
@Autowired
private ElasticsearchOperations elasticsearchOperations;
或者注入
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
进行spring boot 对es API 的CRUD操作。