该版本仍在开发中,尚未被视为稳定。最新稳定版本请使用Spring Cloud Commons 5.0.0spring-doc.cadn.net.cn

春云共享:常见抽象

诸如服务发现、负载均衡和断路器等模式,适合形成一个通用的抽象层,所有 Spring Cloud 客户端都能独立于实现方式使用(例如通过 Eureka 或 Consul 进行发现)。spring-doc.cadn.net.cn

@EnableDiscoveryClient注解

春云共享区提供@EnableDiscoveryClient注解。 这会寻找发现客户端ReactiveDiscovery客户端META-INF/spring.factories. 发现客户端的实现会添加一个配置类到Spring。工厂org.springframework.cloud.client.discovery.EnableDiscoveryClient钥匙。 示例发现客户端实现版本包括 Spring Cloud Netflix EurekaSpring Cloud Consul DiscoverySpring Cloud Zookeeper Discoveryspring-doc.cadn.net.cn

Spring Cloud 默认会同时提供阻挡和被动式服务发现客户端。 你可以通过设置轻松禁用屏蔽和/或响应式客户端spring.cloud.discovery.blocking.enabled=falsespring.cloud.discovery.reactive.enabled=false. 要完全禁用服务发现,只需设置Spring.cloud.discovery.enabled=false.spring-doc.cadn.net.cn

默认情况下,的实现发现客户端自动注册本地的 Spring Boot 服务器与远程发现服务器。 这种行为可以通过设置来禁用autoRegister=false@EnableDiscoveryClient.spring-doc.cadn.net.cn

@EnableDiscoveryClient不再需要。 你可以放一个发现客户端在类路径上实现,使 Spring Boot 应用程序向服务发现服务器注册。

健康指标

Commons 会自动配置以下 Spring Boot 健康指示器。spring-doc.cadn.net.cn

发现客户健康指标

该健康指标基于当前注册的发现客户端实现。spring-doc.cadn.net.cn

  • 要完全禁用,设spring.cloud.discovery.client.health-indicator.enabled=false.spring-doc.cadn.net.cn

  • 要禁用描述字段,设置Spring.cloud.discovery.client.health-indicator.include-description=false. 否则,它可能会冒出描述卷起来的健康指标.spring-doc.cadn.net.cn

  • 要禁用服务检索,设置Spring.cloud.discovery.client.health-indicator.use-services-query=false. 默认情况下,指示器调用客户端的getServices方法。在拥有众多注册服务的部署中,也有可能 每次检查时取回所有服务成本很高。这样可以跳过服务检索,而是使用客户端的探针方法。spring-doc.cadn.net.cn

DiscoveryCompositeHealth贡献者

该综合健康指标基于所有登记者发现健康指标豆。要使之失效, 设置spring.cloud.discovery.client.composite-indicator.enabled=false.spring-doc.cadn.net.cn

订购发现客户端实例

发现客户端接口扩展命令.这在使用多重发现时非常有用 客户端,因为它允许你定义返回的发现客户端的顺序,类似于 你如何通过春季应用订购装载的豆子。默认情况下,任意 的顺序发现客户端设置为0.如果你想为你的自定义设置不同的顺序发现客户端实现时,你只需要覆盖 这getOrder()方法,使其返回适合你设置的值。除此之外,你还可以使用 用来设置 的发现客户端包括 Spring Cloud 等提供的实现领事发现客户端,尤里卡发现客户端Zookeeper 发现客户端.要做到这一点,你只需要设置spring.cloud。{clientIdentifier}.discovery.order(或Eureka.client.order对于尤里卡)属性,达到所需的值。spring-doc.cadn.net.cn

SimpleDiscovery客户端

如果没有Service-Registry支持的话发现客户端在类路径中,SimpleDiscovery客户端实例,利用属性获取服务和实例信息,将被使用。spring-doc.cadn.net.cn

可用实例的信息应以以下格式传递给 via properties:Spring.cloud.discovery.client.simple.instances.service1[0].uri=http://s11:8080哪里Spring.cloud.discovery.client.simple.instances是共同前缀,则服务1站 对于相关服务的ID,而[0]表示实例的索引号 (如示例所示,索引以0),然后 的值乌里是 即实例可用的实际URI。spring-doc.cadn.net.cn

ServiceRegistry

下议院现提供ServiceRegistry该接口提供以下方法:注册(注册)deregister(注册),这使你能够提供定制注册服务。注册是一个标记接口。spring-doc.cadn.net.cn

以下示例展示了ServiceRegistry使用情况:spring-doc.cadn.net.cn

@Configuration
@EnableDiscoveryClient(autoRegister=false)
public class MyConfiguration {
    private ServiceRegistry registry;

    public MyConfiguration(ServiceRegistry registry) {
        this.registry = registry;
    }

    // called through some external process, such as an event or a custom actuator endpoint
    public void register() {
        Registration registration = constructRegistration();
        this.registry.register(registration);
    }
}

ServiceRegistry实现方式有其独特的注册表实现。spring-doc.cadn.net.cn

如果你正在使用ServiceRegistry你需要传递 正确注册表实现ServiceRegistry实现你 正在使用。spring-doc.cadn.net.cn

ServiceRegistry 自动注册

默认情况下,ServiceRegistry实现会自动注册正在运行的服务。 要禁用该行为,你可以设置: *@EnableDiscoveryClient(autoRegister=false)永久禁用自动注册。 *Spring.cloud.service-registry.auto-registration.enabled=false通过配置来禁用该行为。spring-doc.cadn.net.cn

ServiceRegistry 自动注册事件

当服务自动注册时,会触发两个事件。第一个事件,称为InstancePreRegisteredEvent,在服务注册前被激活。第二 事件,称为InstanceRegisteredEvent,在服务注册后被触发。你可以注册一个ApplicationListener(s)倾听并对这些事件作出反应。spring-doc.cadn.net.cn

如果spring.cloud.service-registry.auto-registration.enabled属性设置为false.

Service Registry Actuator Endpoint

春云社区提供/服务注册表执行器端点。 该端点依赖于注册春季应用上下文中的豆子。 叫/服务注册表GET返回注册. 使用POST到同一端点并带有JSON主体,会改变当前状态注册到新的数值。 JSON正文必须包含地位带有优先值的字段。 请参阅相关文档ServiceRegistry实现时用于更新状态时允许的值和返回的值。 例如,Eureka 的支援状态为向上,,OUT_OF_SERVICE未知.spring-doc.cadn.net.cn

Spring RestTemplate 作为负载均衡器客户端

你可以配置一个Rest模板使用负载均衡客户端。 为了实现负载均衡Rest模板,创建一个Rest模板 @Bean并使用@LoadBalanced如下例所示:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

public class MyClass {
    @Autowired
    private RestTemplate restTemplate;

    public String doOtherStuff() {
        String result = restTemplate.getForObject("http://stores/stores", String.class);
        return result;
    }
}
一个Rest模板豆子不再通过自动配置创建。 必须由各个应用程序创建。

URI需要使用虚拟主机名称(即服务名称,而非主机名称)。 这BlockingLoadBalancerClient用于创建完整的物理地址。spring-doc.cadn.net.cn

使用负载均衡Rest模板你需要在类路径中实现一个 Spring Cloud LoadBalancer。 把 Spring Cloud LoadBalancer 入门添加到你的项目中以便使用它。

多个 RestTemplate 对象

如果你想要Rest模板如果不是负载均衡,就创建一个Rest模板豆子,然后注射。 访问负载均衡Rest模板,使用@LoadBalanced当你创建你的时,用限定符@Bean,如下示例所示:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate loadBalanced() {
        return new RestTemplate();
    }

    @Primary
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

public class MyClass {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    @LoadBalanced
    private RestTemplate loadBalanced;

    public String doOtherStuff() {
        return loadBalanced.getForObject("http://stores/stores", String.class);
    }

    public String doStuff() {
        return restTemplate.getForObject("http://example.com", String.class);
    }
}
注意@Primary平原上的注释Rest模板前述示例中的声明以区分无限定部分@Autowired注射。
如果你看到以下错误java.lang.IllegalArgumentException:无法将 org.springframework.web.client.RestTemplate 字段 com.my.app.Foo.restTemplate 设置为 com.sun.proxy.$Proxy 89试着注射休息运营或者说背景spring.aop.proxyTargetClass=true.

@LoadBalanced RestTemplateBuilder创建负载均衡器客户端

你也可以配置一个Rest模板通过注释Rest模板构建器豆子@LoadBalanced:spring-doc.cadn.net.cn

import org.springframework.boot.web.client.RestTemplateBuilder;@Configuration
public class MyConfiguration {

    @Bean
	@LoadBalanced
	RestTemplateBuilder loadBalancedRestTemplateBuilder() {
		return new RestTemplateBuilder();
	}
}

public class MyClass {

    private final RestTemplate restTemplate;

	MyClass(@LoadBalanced RestTemplateBuilder restTemplateBuilder) {
		this.restTemplate = restTemplateBuilder.build();
	}

    public String getStores() {
        return restTemplate.getForObject("http://stores/stores", String.class);
    }
}

URI需要使用虚拟主机名称(即服务名称,而非主机名称)。 这BlockingLoadBalancerClient用于创建完整的物理地址。spring-doc.cadn.net.cn

为了利用 Spring Boot 提供的额外功能Rest模板构建器(例如,可观测性支持)你可能想使用自动配置RestTemplateBuilderConfigurer在创建@LoadBalanced RestTemplateBuilder豆:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

	@LoadBalanced
	RestTemplateBuilder loadBalancedRestTemplateBuilder(RestTemplateBuilderConfigurer configurer) {
		return configurer.configure(new RestTemplateBuilder());
	}
}
使用它时,将 Spring Cloud LoadBalancer 启动器添加到你的项目中。

倍数Rest模板构建器

如果你想要Rest模板构建器如果不是负载均衡,就创建一个Rest模板构建器豆子,然后注射。 访问负载均衡Rest模板构建器,使用@LoadBalanced当你创建你的时,用限定符@Bean,如下示例所示:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplateBuilder loadBalancedRestTemplateBuilder() {
		return new RestTemplateBuilder();
	}

    @Primary
    @Bean
    RestTemplateBuilder restTemplateBuilder() {
		return new RestTemplateBuilder();
	}
}

public class MyClass {

    @Autowired
    private RestTemplateBuilder restTemplateBuilder;

    @Autowired
    @LoadBalanced
    private RestTemplateBuilder loadBalanced;

    public String doOtherStuff() {
        return loadBalanced.getForObject("http://stores/stores", String.class);
    }

    public String doStuff() {
		return restTemplateBuilder.build().getForObject("http://example.com", String.class);
    }
}
注意@Primary平原上的注释Rest模板构建器前述示例中的声明以区分无限定部分@Autowired注射。

Spring RestClient 作为负载均衡器客户端

你可以配置一个Rest客户端使用负载均衡客户端。 为了实现负载均衡Rest客户端,创建一个RestClient.Builder @Bean并使用@LoadBalanced如下例所示:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestClient.Builder restClientBuilder() {
        return RestClient.builder();
    }
}

public class MyClass {

    @Autowired
    private RestClient.Builder restClientBuilder;

    public String doOtherStuff() {
        return restClientBuilder.build().get().uri(URI.create("http://stores/stores")).retrieve().body(String.class);
    }
}

URI需要使用虚拟主机名称(即服务名称,而非主机名称)。 这BlockingLoadBalancerClient用于创建完整的物理地址。spring-doc.cadn.net.cn

为了利用 Spring Boot 提供的额外功能RestClient.Builder(例如,可观测性支持)你可能想使用自动配置RestClientBuilderConfigurer在创建@LoadBalanced RestClient.Builder豆:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestClient.Builder restClientBuilder(RestClientBuilderConfigurer configurer) {
		return configurer.configure(RestClient.builder());
	}
}
使用它时,将 Spring Cloud LoadBalancer 启动器添加到你的项目中。

倍数RestClient.Builder对象

如果你想要RestClient.Builder如果不是负载均衡,就创建一个RestClient.Builder豆子,然后注射。 访问负载均衡RestClient.Builder,使用@LoadBalanced当你创建你的时,用限定符@Bean,如下示例所示:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestClient.Builder loadBalanced() {
        return RestClient.builder();
    }

    @Primary
    @Bean
    RestClient.Builder restClientBuilder() {
        return RestClient.builder();
    }
}

public class MyClass {
    @Autowired
    private RestClient.Builder restClientBuilder;

    @Autowired
    @LoadBalanced
    private RestClient.Builder loadBalanced;

    public String doOtherStuff() {
        return loadBalanced.build().get().uri("http://stores/stores")
        				.retrieve().body(String.class);
    }

    public String doStuff() {
        return restClientBuilder.build().get().uri("http://example.com")
        				.retrieve().body(String.class);
    }
}
注意@Primary平原上的注释RestClient.Builder前述示例中的声明以区分无限定部分@Autowired注射。

Spring WebClient 作为负载均衡器客户端

你可以配置Web客户端自动使用负载均衡客户端。 为了实现负载均衡Web客户端,创建一个WebClient.Builder @Bean并使用@LoadBalanced限定词如下:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

	@Bean
	@LoadBalanced
	public WebClient.Builder loadBalancedWebClientBuilder() {
		return WebClient.builder();
	}
}

public class MyClass {
    @Autowired
    private WebClient.Builder webClientBuilder;

    public Mono<String> doOtherStuff() {
        return webClientBuilder.build().get().uri("http://stores/stores")
        				.retrieve().bodyToMono(String.class);
    }
}

URI需要使用虚拟主机名称(即服务名称,而非主机名称)。 Spring Cloud 负载均衡器用于创建完整的物理地址。spring-doc.cadn.net.cn

为了利用 Spring Boot 提供的额外功能WebClient.Builder(例如,可观测性支持)你可能想使用自动配置WebClientCustomizer在制作@LoadBalanced WebClient.Builder豆:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

	@Bean
	@LoadBalanced
	public WebClient.Builder loadBalancedWebClientBuilder(ObjectProvider<WebClientCustomizer> customizerProvider) {
		WebClient.Builder builder = WebClient.builder();
		customizerProvider.orderedStream().forEach((customizer) -> customizer.customize(builder));
		return builder;
	}
}
如果你想使用@LoadBalanced WebClient.Builder你需要一个 Spring Cloud 负载均衡器 在类路径中实现。我们建议你将Spring Cloud负载均衡器启动器添加到你的项目中。 然后ReactiveLoadBalancer在下面使用。

倍数WebClient.Builder对象

如果你想要WebClient.Buider如果不是负载均衡,就创建一个Web客户端豆子,然后注射。 访问负载均衡WebClient.Builder,使用@LoadBalanced当你创建你的时,用限定符@Bean,如下示例所示:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    WebClient.Builder loadBalanced() {
        return WebClient.builder();
    }

    @Primary
    @Bean
    WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }
}

public class MyClass {
    @Autowired
    private WebClient.Builder webClientBuilder;

    @Autowired
    @LoadBalanced
    private WebClient.Builder loadBalanced;

    public Mono<String> doOtherStuff() {
        return loadBalanced.build().get().uri("http://stores/stores")
        				.retrieve().bodyToMono(String.class);
    }

    public Mono<String> doStuff() {
        return webClientBuilder.build().get().uri("http://example.com")
        				.retrieve().bodyToMono(String.class);
    }
}

重试失败请求

负载均衡Rest模板可以配置为重试失败的请求。 默认情况下,这个逻辑是被禁用的。 对于非响应式版本(其中Rest模板你可以通过在应用的类路径中添加 Spring Retry 来启用它。对于响应式版本(其中WebTestClient),你需要设置Spring.cloud.loadbalancer.retry.enabled=true.spring-doc.cadn.net.cn

如果你想在类路径上用 Spring Retry 或 Reactive Retry 禁用重试逻辑,可以设置spring.cloud.loadbalancer.retry.enabled=false.spring-doc.cadn.net.cn

对于非响应式实现,如果你想实现退避政策在重试时,你需要创造出一个类型的豆子LoadBalancedRetryFactory并覆盖createBackOffPolicy()方法。spring-doc.cadn.net.cn

对于响应式实现,你只需通过设置来启用spring.cloud.loadbalancer.retry.backoff.enabledfalse.spring-doc.cadn.net.cn

你可以设置:spring-doc.cadn.net.cn

  • spring.cloud.loadbalancer.retry.maxRetriesOnSameServiceInstance- 表示请求应在同一个请求上重试多少次ServiceInstance(对每个选定实例单独计数)spring-doc.cadn.net.cn

  • spring.cloud.loadbalancer.retry.maxRetriesOnNextServiceInstance- 表示新选中的请求应重试多少次ServiceInstancespring-doc.cadn.net.cn

  • spring.cloud.loadbalancer.retry.retryableStatusCodes- 每次失败请求时都用来重试的状态码。spring-doc.cadn.net.cn

对于被动实现,你还可以设置: -spring.cloud.loadbalancer.retry.backoff.minBackoff- 设定最小退回持续时间(默认为5毫秒) -spring.cloud.loadbalancer.retry.backoff.maxBackoff- 设定最大退回持续时间(默认为最大长值毫秒) -Spring.cloud.loadbalancer.retry.backoff.jitter- 设置用于计算每次通话实际退回持续时间的抖动(默认为0.5)。spring-doc.cadn.net.cn

对于响应式实现,你也可以自己实现LoadBalancerRetryPolicy以便对负载均衡呼叫重转进行更详细的控制。spring-doc.cadn.net.cn

对于这两种实现,你也可以通过在Spring.cloud.loadbalancer。[serviceId].retry.retryable-exceptions财产。如果你有,我们会确保补充RetryableStatusCodeExceptions加入您提供的例外列表,以便我们也重试可重试状态代码。如果你没有通过属性指定任何异常,我们默认使用的例外是IOException,超时例外RetryableStatusCodeException.你也可以通过设置来启用所有例外的重试Spring.cloud.loadbalancer。[serviceId].retry.retry-on-all-exceptionstrue.spring-doc.cadn.net.cn

如果你用 Spring Retries 的阻挡实现,想保留之前版本的行为,可以Spring.cloud.loadbalancer。[serviceId].retry.retry-on-all-exceptionstrue因为那是阻挡实现的默认模式。
单个负载均衡器客户端可以单独配置,属性与上述相同,但前缀为spring.cloud.loadbalancer.clients.<clientId>.*哪里客户标识是负载均衡器的名称。
对于负载均衡的重试,默认情况下,我们会将ServiceInstanceListSupplier豆子RetryAwareServiceInstanceListSupplier如果有的话,可以选择与之前选择的不同实例。你可以通过设置 的值来禁用这种行为spring.cloud.loadbalancer.retry.avoidPreviousInstancefalse.
@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryFactory retryFactory() {
        return new LoadBalancedRetryFactory() {
            @Override
            public BackOffPolicy createBackOffPolicy(String service) {
        		return new ExponentialBackOffPolicy();
        	}
        };
    }
}

如果你想加一个或多个RetryListener实现你的重试功能时,你需要 创造一颗类型的豆子LoadBalancedRetryListenerFactory并返回RetryListener数组 您希望用于某项服务,如下示例所示:spring-doc.cadn.net.cn

@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryListenerFactory retryListenerFactory() {
        return new LoadBalancedRetryListenerFactory() {
            @Override
            public RetryListener[] createRetryListeners(String service) {
                return new RetryListener[]{new RetryListener() {
                    @Override
                    public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
                        //TODO Do you business...
                        return true;
                    }

                    @Override
                     public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        //TODO Do you business...
                    }

                    @Override
                    public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        //TODO Do you business...
                    }
                }};
            }
        };
    }
}

春季网络流Web客户端作为负载均衡器客户端

Spring WebFlux 可以同时处理反应型和非反应型Web客户端配置,正如主题所述:spring-doc.cadn.net.cn

春季网络流Web客户端反应堆负载均衡器交换过滤器函数

你可以配置Web客户端使用ReactiveLoadBalancer. 如果你在项目中添加 Spring Cloud LoadBalancer 启动程序 如果春季网流位于类路径上,反应堆负载均衡器交换过滤器函数是自动配置的。 以下示例展示了如何配置Web客户端使用响应式负载均衡器:spring-doc.cadn.net.cn

public class MyClass {
    @Autowired
    private ReactorLoadBalancerExchangeFilterFunction lbFunction;

    public Mono<String> doOtherStuff() {
        return WebClient.builder().baseUrl("http://stores")
            .filter(lbFunction)
            .build()
            .get()
            .uri("/stores")
            .retrieve()
            .bodyToMono(String.class);
    }
}

URI需要使用虚拟主机名称(即服务名称,而非主机名称)。 这反应堆负载均衡器用于创建完整的物理地址。spring-doc.cadn.net.cn

春季网络流Web客户端配合非响应式负载均衡客户端

如果春季网流位于类路径上,LoadBalancerExchangeFilterFunction是自动配置的。不过请注意,这点 在底层使用一个非反应客户端。 以下示例展示了如何配置Web客户端使用负载均衡器:spring-doc.cadn.net.cn

public class MyClass {
    @Autowired
    private LoadBalancerExchangeFilterFunction lbFunction;

    public Mono<String> doOtherStuff() {
        return WebClient.builder().baseUrl("http://stores")
            .filter(lbFunction)
            .build()
            .get()
            .uri("/stores")
            .retrieve()
            .bodyToMono(String.class);
    }
}

URI需要使用虚拟主机名称(即服务名称,而非主机名称)。 这LoadBalancerClient用于创建完整的物理地址。spring-doc.cadn.net.cn

沃恩:这种做法现在已被淘汰。 我们建议你改用 WebFlux 配合响应式负载均衡器。spring-doc.cadn.net.cn

忽略网络接口

有时,忽略某些命名的网络接口是有用的,这样它们可以被排除在服务发现注册之外(例如运行在 Docker 容器中)。 可以设置正则表达式列表,使得忽略所需的网络接口。 以下配置忽略了docker0接口以及所有以维斯:spring-doc.cadn.net.cn

application.yml
spring:
  cloud:
    inetutils:
      ignoredInterfaces:
        - docker0
        - veth.*

你也可以通过使用正则表达式列表强制只使用指定的网络地址,如下示例所示:spring-doc.cadn.net.cn

bootstrap.yml
spring:
  cloud:
    inetutils:
      preferredNetworks:
        - 192.168
        - 10.0

你也可以强制只使用本地站点地址,如下示例所示:spring-doc.cadn.net.cn

application.yml
spring:
  cloud:
    inetutils:
      useOnlySiteLocalInterfaces: true

有关何谓站点本地地址的详细信息,请参见 Inet4Address.html.isSiteLocalAddress() 条目。spring-doc.cadn.net.cn

启用功能

春云社区提供/特征执行器端点。 该端点返回类路径上可用的功能及其是否被启用。 返回的信息包括功能类型、名称、版本和提供商。spring-doc.cadn.net.cn

特征类型

“特征”有两种类型:抽象特征和命名特征。spring-doc.cadn.net.cn

抽象特征是指定义了接口或抽象类,并且实现后会创建的功能,例如发现客户端,LoadBalancerClient锁务服务. 抽象类或接口用于在上下文中寻找该类型的豆子。 显示的版本为bean.getClass().getPackage().getImplementationVersion().spring-doc.cadn.net.cn

命名特征是指没有特定类实现的功能。这些功能包括“断路器”、“API 网关”、“春季云总线”等。这些特征需要名字和Beans类型。spring-doc.cadn.net.cn

声明特征

任何模都可以声明任意数量的HasFeatureBeans,正如以下例子所示:spring-doc.cadn.net.cn

@Bean
public HasFeatures commonsFeatures() {
  return HasFeatures.abstractFeatures(DiscoveryClient.class, LoadBalancerClient.class);
}

@Bean
public HasFeatures consulFeatures() {
  return HasFeatures.namedFeatures(
    new NamedFeature("Spring Cloud Bus", ConsulBusAutoConfiguration.class),
    new NamedFeature("Circuit Breaker", HystrixCommandAspect.class));
}

@Bean
HasFeatures localFeatures() {
  return HasFeatures.builder()
      .abstractFeature(Something.class)
      .namedFeature(new NamedFeature("Some Other Feature", Someother.class))
      .abstractFeature(Somethingelse.class)
      .build();
}

每种豆子都应该放入适当的保护区@Configuration.spring-doc.cadn.net.cn

Spring Cloud 兼容性验证

由于一些用户在设置 Spring Cloud 应用时遇到困难,我们决定 添加兼容性验证机制。如果你现在的设备不兼容,它会坏掉 附带Spring Cloud的要求,并附上一份报告,详细说明了具体出了什么问题。spring-doc.cadn.net.cn

目前我们会确认你被添加到了 classpath 的 Spring Boot 版本。spring-doc.cadn.net.cn

***************************
APPLICATION FAILED TO START
***************************

Description:

Your project setup is incompatible with our requirements due to following reasons:

- Spring Boot [2.1.0.RELEASE] is not compatible with this Spring Cloud release train


Action:

Consider applying the following actions:

- Change Spring Boot version to one of the following versions [1.2.x, 1.3.x] .
You can find the latest Spring Boot versions here [https://spring.io/projects/spring-boot#learn].
If you want to learn more about the Spring Cloud Release train compatibility, you can visit this page [https://spring.io/projects/spring-cloud#overview] and check the [Release Trains] section.

要禁用此功能,请设置spring.cloud.compatibility-verifier.enabledfalse. 如果你想覆盖兼容的 Spring Boot 版本,只需设置spring.cloud.compatibility-verifier.compatible-boot-versions带有逗号分离列表的财产 以及兼容的 Spring Boot 版本。spring-doc.cadn.net.cn