All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.boot.autoconfigure.web.client.RestTemplateJdkHttp2ClientAutoConfiguration Maven / Gradle / Ivy

There is a newer version: 1.6.8
Show newest version
package org.springframework.boot.autoconfigure.web.client;

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.JdkHttp2ClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.client.constants.RestTemplateJdkHttp2ClientSystemPropertiesConstants;
import org.springframework.web.client.logger.RestTemplateLoggingInterceptor;
import org.zodiac.autoconfigure.bootstrap.condition.ConditionalOnSpringCloudBootstrapDisabled;
import org.zodiac.core.context.config.annotation.AppRefreshScope;

import java.util.Optional;

@SpringBootConfiguration
@ConditionalOnSpringCloudBootstrapDisabled
@ConditionalOnClass(value = {java.net.http.HttpClient.class})
@ConditionalOnMissingClass(value = {"org.springframework.cloud.context.config.annotation.RefreshScope"})
@ConditionalOnProperty(name = RestTemplateJdkHttp2ClientSystemPropertiesConstants.SPRING_REST_TEMPLATE_HTTP2CLIENT_ENABLED, havingValue = "true")
public class RestTemplateJdkHttp2ClientAutoConfiguration {

    public RestTemplateJdkHttp2ClientAutoConfiguration() {
        super();
    }

    @Bean
    @AppRefreshScope
    @ConditionalOnMissingBean
    @ConfigurationProperties(prefix = RestTemplateJdkHttp2ClientSystemPropertiesConstants.SPRING_REST_TEMPLATE_HTTP2CLIENT_PREFIX)
    protected RestTemplateJdkHttp2ClientProperties restTemplateJdkHttp2ClientProperties() {
        return new RestTemplateJdkHttp2ClientProperties();
    }

    @Bean
    protected RestTemplate restTemplate(RestTemplateJdkHttp2ClientProperties properties,
        ObjectProvider builderProvider) {
        java.net.http.HttpClient.Builder builder = java.net.http.HttpClient.newBuilder().connectTimeout(properties.getConnectionTimeout())
            .followRedirects(properties.getRedirect()).version(properties.getHttpVersion());
        Optional.ofNullable(properties.getHttp2Priority()).ifPresent(p -> builder.priority(p));
        java.net.http.HttpClient httpClient = builder.build();
        return builderProvider.getIfAvailable(RestTemplateBuilder::new)
            .requestFactory(() -> new JdkHttp2ClientHttpRequestFactory(httpClient, properties.getReadTimeout()))
            .interceptors(new RestTemplateLoggingInterceptor(properties.getLevel())).build();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy