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

org.zodiac.autoconfigure.bootstrap.loadbalancer.AsyncAppLoadBalancerAutoConfiguration Maven / Gradle / Ivy

package org.zodiac.autoconfigure.bootstrap.loadbalancer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.AsyncClientHttpRequestInterceptor;
import org.zodiac.autoconfigure.bootstrap.condition.ConditionalOnSpringCloudBootstrapDisabled;
import org.zodiac.core.bootstrap.loadbalancer.AppAsyncLoadBalancerInterceptor;
import org.zodiac.core.bootstrap.loadbalancer.AppAsyncRestTemplateCustomizer;
import org.zodiac.core.bootstrap.loadbalancer.AppLoadBalanced;
import org.zodiac.core.bootstrap.loadbalancer.AppLoadBalancerClient;

@SpringBootConfiguration
@ConditionalOnSpringCloudBootstrapDisabled
@ConditionalOnBean(value = {AppLoadBalancerClient.class})
@ConditionalOnClass(value = {org.springframework.web.client.AsyncRestTemplate.class})
public class AsyncAppLoadBalancerAutoConfiguration {

    @SpringBootConfiguration
    static class AsyncRestTemplateCustomizerConfig {

        @AppLoadBalanced
        @Autowired(required = false)
        private List restTemplates = Collections.emptyList();

        @Bean
        protected SmartInitializingSingleton
            loadBalancedAsyncRestTemplateInitializer(final List customizers) {
            return () -> {
                for (org.springframework.web.client.AsyncRestTemplate restTemplate : AsyncRestTemplateCustomizerConfig.this.restTemplates) {
                    for (AppAsyncRestTemplateCustomizer customizer : customizers) {
                        customizer.customize(restTemplate);
                    }
                }
            };
        }

    }

    @SpringBootConfiguration
    static class LoadBalancerInterceptorConfig {

        @Bean
        protected AppAsyncLoadBalancerInterceptor
            asyncLoadBalancerInterceptor(AppLoadBalancerClient loadBalancerClient) {
            return new AppAsyncLoadBalancerInterceptor(loadBalancerClient);
        }

        @Bean
        protected AppAsyncRestTemplateCustomizer
            asyncRestTemplateCustomizer(final AppAsyncLoadBalancerInterceptor loadBalancerInterceptor) {
            return restTemplate -> {
                List list = new ArrayList<>(restTemplate.getInterceptors());
                list.add(loadBalancerInterceptor);
                restTemplate.setInterceptors(list);
            };
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy