一、SpringBoot集成ES部署
在集成ES前,先要安裝和配置ES環境。對於MacOS和Linux系統用戶,可以使用Homebrew來安裝ES,使用以下命令即可:
brew update brew install elasticsearch
對於Windows用戶,可以從官網下載zip包,解壓後運行bin/elasticsearch.bat即可。
二、SpringBoot集成ES版本要求
在集成中,需要根據自己的SpringBoot版本和ES版本來選擇合適的ES Client API。大致對應關係如下:
ES6 -> 版本 版本 >= 2.1.0.RELEASE, 版本 >= 2.4.0.RELEASE
同時,需要在pom.xml中引入對應的dependencies:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
三、SpringBoot集成ES日誌
在開發過程中,通常需要對ES操作的日誌進行記錄和查看。可以在log4j.properties或logback.xml中進行配置:
#log4j.properties log4j.logger.org.elasticsearch=INFO,es log4j.additivity.org.elasticsearch=false log4j.appender.es=org.apache.log4j.FileAppender log4j.appender.es.file=elasticsearch.log log4j.appender.es.threshold=debug log4j.appender.es.layout=org.apache.log4j.PatternLayout log4j.appender.es.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n
四、SpringBoot集成ES集群
ES可以通過搭建集群來實現高可用和負載均衡。在集成中,通過在application.yml中進行配置實現集群:
spring: data: elasticsearch: cluster-nodes: - cluster-node1:9300 - cluster-node2:9301 - cluster-node3:9302
五、SpringBoot集成ES6
如果使用ES6版本,則需要引入高版本的API依賴:
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.x.x</version> </dependency>
同時,ES6版本默認設置了”strict”模式,需要在Connfiguration中進行配置:
@Configuration public class RestClientConfig extends AbstractElasticsearchConfiguration { @Override public RestHighLevelClient elasticsearchClient() { final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo("localhost:9200", "localhost:9291") .build(); return RestClients.create(clientConfiguration).rest(); } @Override public ElasticsearchRestTemplate elasticsearchRestTemplate() { return new ElasticsearchRestTemplate(elasticsearchClient()); } @Override public ElasticsearchOperations elasticsearchOperations() { return new ElasticsearchRestTemplate(elasticsearchClient()); } @Override public EntityMapper entityMapper() { } }
六、SpringBoot集成ES7
在ES7中,Client API將要被廢棄,取而代之的是高速的Java HTTP客戶端,可以通過以下方式進行引用:
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-java-client</artifactId> <version>7.x.x</version> </dependency>
通過配置高速的Java HTTP客戶端,可以實現更好的查詢性能。
七、SpringBoot集成ES8
在ES8中,將繼續提高查詢性能和去除Client API,因此需要升級到更高的API依賴版本:
<dependency> <groupId>org.elasticsearch.client> <artifactId>elasticsearch-rest-client-sniffer</artifactId> <version>7.8.0</version> </dependency>
同時,由於ES7中已經廢除了TransportClient,因此代碼需要進行遷移,大致思路如下:
private RestHighLevelClient restHighLevelClient; private RestClient restClient; private static final RequestOptions COMMON_OPTIONS; static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); COMMON_OPTIONS = builder.build(); } public ElasticsearchClient() { restHighLevelClient = new RestHighLevelClient( RestClient.builder( new HttpHost("192.168.1.2", 9200, "http"), new HttpHost("192.168.1.3", 9200, "http"))); restClient = restHighLevelClient.getLowLevelClient(); }
八、SpringBoot集成ES生成索引map
可以通過Spring Data專門提供的ElasticsearchEntityTypeMappper實現即時的索引更新和映射生成:
@Configuration public class ElasticsearchClientConfig extends AbstractElasticsearchConfiguration { @Override public RestHighLevelClient elasticsearchClient() { final ClientConfiguration configuration = ClientConfiguration.builder() .connectedTo("localhost:9200") .build(); return RestClients.create(configuration).rest(); } @Bean public ElasticsearchOperations elasticsearchOperations() { ElasticsearchRestTemplate elasticsearchTemplate = new ElasticsearchRestTemplate(elasticsearchClient()); Map<String, Object> indexSettings = new HashMap<>(); indexSettings.put("index.number_of_shards", 1); indexSettings.put("index.number_of_replicas", 0); elasticsearchTemplate.deleteIndex("book"); elasticsearchTemplate.createIndex(Book.class, indexSettings); elasticsearchTemplate.putMapping(Book.class); elasticsearchTemplate.refresh(Book.class); return elasticsearchTemplate; } }
九、SpringBoot集成ES用戶名密碼
當需要進行安全控制和授權時,可以通過在application.yml中進行配置並進行許可權控制:
spring: data: elasticsearch: repositories: enabled: true properties: http: auth: password: elasticsearch_password username: elasticsearch_username
同時,需要在ElasticsearchTemplate中進行身份驗證:
public ElasticsearchTemplate esTemplate(RestHighLevelClient elasticsearchClient) { final ClientConfiguration configuration = ClientConfiguration.builder() .connectedTo("localhost:9200") .build(); return new ElasticsearchRestTemplate( elasticsearchClient, new DefaultEntityMapper(), new CustomElasticsearchExceptionTranslator(), new SearchTemplateEngine()); } @Bean public RestHighLevelClient elasticsearchClient() { return RestClients.create( ClientConfiguration.builder() .connectedTo("localhost:9200") .usingSsl() .withBasicAuth("elastic", "password") .build()) .rest(); }
總結
本篇文章詳細介紹了如何使用SpringBoot集成ES,並從多個方面進行了詳細闡述,包括部署、版本要求、日誌、集群、ES6、ES7、ES8、生成索引map、用戶名密碼等。希望可以對讀者了解和使用ES有所幫助。
原創文章,作者:SHTE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149776.html