Auto-configure JsonpMapper even with user-defined transport

Closes gh-36698
This commit is contained in:
Andy Wilkinson 2023-08-03 12:41:17 +01:00
parent 803c155e69
commit c6dc505932
4 changed files with 18 additions and 7 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2022 the original author or authors. * Copyright 2012-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -17,12 +17,15 @@
package org.springframework.boot.autoconfigure.elasticsearch; package org.springframework.boot.autoconfigure.elasticsearch;
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchClient;
import org.elasticsearch.client.RestClient;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchClientConfigurations.ElasticsearchClientConfiguration; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchClientConfigurations.ElasticsearchClientConfiguration;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchClientConfigurations.ElasticsearchTransportConfiguration; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchClientConfigurations.ElasticsearchTransportConfiguration;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchClientConfigurations.JsonpMapperConfiguration;
import org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration; import org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
@ -33,8 +36,10 @@ import org.springframework.context.annotation.Import;
* @since 3.0.0 * @since 3.0.0
*/ */
@AutoConfiguration(after = { JsonbAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class }) @AutoConfiguration(after = { JsonbAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class })
@ConditionalOnBean(RestClient.class)
@ConditionalOnClass(ElasticsearchClient.class) @ConditionalOnClass(ElasticsearchClient.class)
@Import({ ElasticsearchTransportConfiguration.class, ElasticsearchClientConfiguration.class }) @Import({ JsonpMapperConfiguration.class, ElasticsearchTransportConfiguration.class,
ElasticsearchClientConfiguration.class })
public class ElasticsearchClientAutoConfiguration { public class ElasticsearchClientAutoConfiguration {
} }

View File

@ -44,6 +44,12 @@ import org.springframework.context.annotation.Import;
*/ */
class ElasticsearchClientConfigurations { class ElasticsearchClientConfigurations {
@Import({ JacksonJsonpMapperConfiguration.class, JsonbJsonpMapperConfiguration.class,
SimpleJsonpMapperConfiguration.class })
static class JsonpMapperConfiguration {
}
@ConditionalOnMissingBean(JsonpMapper.class) @ConditionalOnMissingBean(JsonpMapper.class)
@ConditionalOnClass(ObjectMapper.class) @ConditionalOnClass(ObjectMapper.class)
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ -79,9 +85,6 @@ class ElasticsearchClientConfigurations {
} }
@Import({ JacksonJsonpMapperConfiguration.class, JsonbJsonpMapperConfiguration.class,
SimpleJsonpMapperConfiguration.class })
@ConditionalOnBean(RestClient.class)
@ConditionalOnMissingBean(ElasticsearchTransport.class) @ConditionalOnMissingBean(ElasticsearchTransport.class)
static class ElasticsearchTransportConfiguration { static class ElasticsearchTransportConfiguration {

View File

@ -17,6 +17,7 @@
package org.springframework.boot.autoconfigure.elasticsearch; package org.springframework.boot.autoconfigure.elasticsearch;
import co.elastic.clients.transport.ElasticsearchTransport; import co.elastic.clients.transport.ElasticsearchTransport;
import org.elasticsearch.client.RestClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
@ -37,9 +38,11 @@ import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchCl
* @since 3.0.0 * @since 3.0.0
*/ */
@AutoConfiguration(after = ElasticsearchClientAutoConfiguration.class) @AutoConfiguration(after = ElasticsearchClientAutoConfiguration.class)
@ConditionalOnBean(RestClient.class)
@ConditionalOnClass({ ReactiveElasticsearchClient.class, ElasticsearchTransport.class, Mono.class }) @ConditionalOnClass({ ReactiveElasticsearchClient.class, ElasticsearchTransport.class, Mono.class })
@EnableConfigurationProperties(ElasticsearchProperties.class) @EnableConfigurationProperties(ElasticsearchProperties.class)
@Import(ElasticsearchClientConfigurations.ElasticsearchTransportConfiguration.class) @Import({ ElasticsearchClientConfigurations.JsonpMapperConfiguration.class,
ElasticsearchClientConfigurations.ElasticsearchTransportConfiguration.class })
public class ReactiveElasticsearchClientAutoConfiguration { public class ReactiveElasticsearchClientAutoConfiguration {
@Bean @Bean

View File

@ -154,7 +154,7 @@ class ElasticsearchClientAutoConfigurationTests {
static class TransportConfiguration { static class TransportConfiguration {
@Bean @Bean
ElasticsearchTransport customElasticsearchTransport() { ElasticsearchTransport customElasticsearchTransport(JsonpMapper mapper) {
return mock(ElasticsearchTransport.class); return mock(ElasticsearchTransport.class);
} }