You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot连接Docker部署的Elasticsearch技术问询

Connecting Spring Boot to Your Dockerized Elasticsearch 6.2.3 Instance

Let's walk through how to get your Spring Boot app talking to that Docker-hosted Elasticsearch instance step by step. I'll cover dependencies, configuration, basic code examples, and common pitfalls to watch out for.

1. Match Spring Boot & Elasticsearch Versions

Since you're running Elasticsearch 6.2.3 (OSS), you need to align your Spring Boot and Spring Data Elasticsearch versions to avoid compatibility issues. For ES 6.x, Spring Boot 2.0.x (which pairs with Spring Data Elasticsearch 3.0.x) is the perfect fit. Stick to this stack unless you have a specific reason to deviate.

Maven Dependency (pom.xml)

Add this to your pom.xml if you use Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <!-- The Spring Boot parent will manage the version, but you can pin it if needed -->
    <!-- <version>2.0.9.RELEASE</version> -->
</dependency>

Gradle Dependency (build.gradle)

For Gradle users:

implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
// Pin the version explicitly if required:
// implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch:2.0.9.RELEASE'

2. Configure Spring Boot to Connect to Elasticsearch

Update your application configuration file (application.properties or application.yml) with details matching your Dockerized ES instance.

application.properties

# Elasticsearch connection settings
spring.data.elasticsearch.cluster-name=your-cluster-name  # Must match cluster.name in your elasticsearch.yml
spring.data.elasticsearch.cluster-nodes=localhost:9300  # Default ES transport port—verify Docker maps this!
spring.data.elasticsearch.repositories.enabled=true

application.yml (Alternative)

If you prefer YAML:

spring:
  data:
    elasticsearch:
      cluster-name: your-cluster-name
      cluster-nodes: localhost:9300
      repositories:
        enabled: true

Important: Double-check your Docker container has port 9300 mapped to your host machine. When starting the container, you should use a command like docker run -p 9200:9200 -p 9300:9300 your-es-image. Port 9300 is for the transport client (used by Spring Data Elasticsearch), while 9200 is the REST API port.

3. Basic Code Example to Test the Connection

Let's build a simple setup to confirm the connection works.

Step 1: Create an Elasticsearch Entity

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "books", type = "book")
public class Book {
    @Id
    private String id;
    private String title;
    private String author;

    // Constructors, getters, setters
    public Book() {}

    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // Add getters and setters here...
}

Step 2: Create a Repository Interface

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;

public interface BookRepository extends ElasticsearchRepository<Book, String> {
    // Custom query example
    List<Book> findByAuthor(String author);
}

Step 3: Test the Connection in a Service

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookService {
    private final BookRepository bookRepository;

    @Autowired
    public BookService(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    public void verifyConnection() {
        // Save a test book
        Book testBook = new Book("1984", "George Orwell");
        bookRepository.save(testBook);

        // Fetch it back to confirm success
        Book fetchedBook = bookRepository.findById(testBook.getId()).orElse(null);
        if (fetchedBook != null) {
            System.out.println("Connection successful! Fetched book: " + fetchedBook.getTitle());
        } else {
            System.err.println("Connection failed—check your ES setup!");
        }
    }
}

Call this verifyConnection() method from a command-line runner or controller to test the link between your app and ES.

4. Common Troubleshooting Tips

  • Port Mapping Errors: If you get "connection refused" errors, run docker ps to confirm port 9300 is mapped to your host.
  • Cluster Name Mismatch: Even a small typo between your Spring config and elasticsearch.yml's cluster.name will break the connection—double-check this!
  • Cross-Docker Network Access: If your Spring Boot app runs in another Docker container, ensure both containers are on the same Docker network, or use the ES container's IP instead of localhost.
  • ES Health Check: Verify your ES instance is running by visiting http://localhost:9200 in your browser. You should see a JSON response with the cluster name and version.
  • OSS Version Notes: Since you're using the OSS build, X-Pack security is disabled by default—no need to add username/password credentials unless you've enabled custom security plugins.

内容的提问来源于stack exchange,提问作者Alessio Frabotta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:18:38