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=
我正在使用 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=