SpringBoot集成Elasticsearch 3.x配置求助及现有配置代码
Spring Boot 集成 Elasticsearch 3.x 配置指南
Hey,我来帮你搞定Spring Boot配置Elasticsearch 3.x的问题!首先得明确,Elasticsearch 3.x属于比较早期的版本,对应的Spring Data Elasticsearch版本得匹配好,建议用Spring Boot 1.5.x系列(它适配的Spring Data Elasticsearch 2.1.x对Elasticsearch 2.x-5.x支持都不错)。下面给你补全并修正你写了一半的配置代码,再给你完整的配置步骤:
1. 先搞定依赖(Maven示例)
在pom.xml里引入对应依赖,版本一定要对应上,不然容易出兼容性问题:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.22.RELEASE</version> <relativePath/> </parent> <dependencies> <!-- Spring Boot Web 基础依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Data Elasticsearch 核心 --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> </dependency> <!-- Elasticsearch 3.x 核心包 --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>3.0.0</version> </dependency> </dependencies>
2. 完整的配置类代码
你的配置类写了一半就断了,下面给你补全两种常见配置模式:
模式一:嵌入式节点(适合开发测试)
这种模式会在应用内启动一个Elasticsearch节点,不用单独部署ES服务,方便开发调试:
import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import java.io.File; import java.io.IOException; @Configuration // 你的JPA仓库扫描路径,按实际包名调整 @EnableJpaRepositories(basePackages = "com.demo.elastic.jparepository") // Elasticsearch仓库扫描路径 @EnableElasticsearchRepositories(basePackages = "com.demo.elastic.repository") public class ElasticConfiguration { @Bean public NodeBuilder nodeBuilder() { return NodeBuilder.nodeBuilder(); } @Bean public ElasticsearchOperations elasticsearchTemplate() throws IOException { // 创建临时目录存储ES数据,生产环境记得改成固定路径 File tmpDir = File.createTempFile("elastic", "tmp"); tmpDir.delete(); tmpDir.mkdirs(); // 构建嵌入式节点 Node node = nodeBuilder() .local(true) .data(true) .settings(settingsBuilder() .put("path.home", tmpDir.getAbsolutePath()) .put("path.data", tmpDir.getAbsolutePath() + "/data") .put("path.logs", tmpDir.getAbsolutePath() + "/logs") .put("http.enabled", true)) .node(); return new ElasticsearchTemplate(node.client()); } }
模式二:连接远程ES集群(生产环境推荐)
如果你的ES是单独部署的集群,用这种模式更稳定:
import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import java.net.InetAddress; import java.net.UnknownHostException; @Configuration @EnableJpaRepositories(basePackages = "com.demo.elastic.jparepository") @EnableElasticsearchRepositories(basePackages = "com.demo.elastic.repository") public class ElasticConfiguration { @Bean public ElasticsearchOperations elasticsearchTemplate() throws UnknownHostException { // 填写你的ES集群名称,和集群配置保持一致 Settings settings = Settings.settingsBuilder() .put("cluster.name", "your-cluster-name") .build(); // 创建客户端连接远程节点,IP和端口按实际情况调整 Client client = TransportClient.builder() .settings(settings) .build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); return new ElasticsearchTemplate(client); } }
3. 几个关键注意点
- 版本匹配红线:一定要保证Spring Data Elasticsearch和ES服务器版本兼容,ES 3.0.0对应Spring Data Elasticsearch 2.1.x是没问题的,别乱跨版本搭配!
- 端口别搞混:ES的TCP通信端口是9300,HTTP端口是9200,用TransportClient连接时必须用9300。
- 生产环境建议:嵌入式节点只适合开发测试,生产环境必须用远程集群模式,还要给ES数据目录配置合适的读写权限。
内容的提问来源于stack exchange,提问作者Rahul Raj Sonu
相关产品推荐
相关产品推荐

