spring 数据 elasticsearch 属性 到达反向代理后面的 elasticsearch(带有 web 上下文路径的 URI)

spring data elasticsearch propery to reach elasticsearch behind a reverse proxy (URI with a web context-path)

我正在使用 spring boot 2.4.6 和 data elasticsearch。

我想如下设置我的 elasticsearch 配置,因为服务器正在运行一个重写 URL.

的反向代理
spring.elasticsearch.rest.uris=https://admin-integration.hello.com/elasticsearch/api
spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=blabla

然后我得到

java.net.UnknownHostException: admin-integration.hello.com/elasticsearch/api

我该如何处理? 我在配置中找不到任何相关的 属性。 有什么线索吗?

Spring 数据 Elasticsearch 配置可以采用 withPathPrefix(String) 参数(请参阅 https://docs.spring.io/spring-data/elasticsearch/docs/4.2.4/reference/html/#elasticsearch.clients.configuration 处的文档)

这是一个 Spring 引导问题,因为这些属性由 Spring 引导处理以设置 Spring Data Elasticsearch 配置。

感谢 PJ 的回复,我得以解决此问题

不要使用 spring 启动器,而是使用普通的 spring 数据

    <!-- we use our own configuration because webpath prefix can not be provided with the stuffs below
        
         https://reflectoring.io/spring-boot-elasticsearch/
         https://hackernoon.com/elasticsearch-in-java-spring-boot-starter-pack-3kx330h
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        --> 
        
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
      </dependency>

使用普通配置

    @Configuration
@EnableElasticsearchRepositories(basePackages = "lu.esante.agence.referential.elasticsearch.accessdb.repositories")
@ComponentScan(basePackages = { "lu.esante.agence.referential.accessdb" })
public class ElasticsearchClientConfig extends AbstractElasticsearchConfiguration {

    @Value("${my.elasticsearch.rest.prefix:}")
    private String es_prefix;

    @Value("${my.elasticsearch.rest.uris}")
    private String es_uri;

    @Value("${my.elasticsearch.rest.username}")
    private String es_user;

    @Value("${my.elasticsearch.rest.password}")
    private String es_password;
    
    @Value("${my.elasticsearch.rest.ssl:false}")
    private String es_ssl;

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {

        final ClientConfiguration clientConfiguration = !StringUtils.isEmpty(es_prefix)
                ? ClientConfiguration.builder().connectedTo(es_uri).usingSsl().withPathPrefix(es_prefix)
                        .withBasicAuth(es_user, es_password).withConnectTimeout(Duration.ofSeconds(5))                            
                          .withSocketTimeout(Duration.ofSeconds(3)).build()
                : ClientConfiguration.builder().connectedTo(es_uri).withBasicAuth(es_user, es_password).build();

        return RestClients.create(clientConfiguration).rest();
    }
}

一些提示:

  • prefix 不能为 null 也不能为空
  • 您必须指定端口。如果不是,默认需要 9200
my.elasticsearch.rest.uris=hello.com:443
my.elasticsearch.rest.ssl=true
my.elasticsearch.rest.prefix=elasticsearch/api
my.elasticsearch.rest.username=elastic
my.elasticsearch.rest.password=