Spring cloud 是否可以在BootstrapConfiguration上使用@EnableFeignClient?

Spring cloud 是否可以在BootstrapConfiguration上使用@EnableFeignClient?,spring-cloud,netflix-feign,Spring Cloud,Netflix Feign,我想使用来自PropertySourceLocator的假客户端,该客户端必须在引导过程中注册。我的spring.factories中有以下内容: org.springframework.cloud.bootstrap.BootstrapConfiguration=\ test.PropertiesConfiguration 与 外部客户端自动连接到MyPropertySourceLocator。然而,虽然同一个客户机在常规bean中工作,但在这里它不工作。所有请求均失败,但出现此异常: fe

我想使用来自
PropertySourceLocator
的假客户端,该客户端必须在引导过程中注册。我的
spring.factories中有以下内容:

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
test.PropertiesConfiguration

外部客户端自动连接到
MyPropertySourceLocator
。然而,虽然同一个客户机在常规bean中工作,但在这里它不工作。所有请求均失败,但出现此异常:

feign.codec.DecodeException: No qualifying bean of type [org.springframework.boot.autoconfigure.web.HttpMessageConverters] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:173)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:141)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:96)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:92)
    at com.sun.proxy.$Proxy23.get(Unknown Source)
    at test.MyPropertySourceLocator$1.getProperty(MyPropertySourceLocator.java:32)
    at org.springframework.core.env.CompositePropertySource.getProperty(CompositePropertySource.java:59)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:84)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:60)
    at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:511)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty(PropertySourcesPlaceholderConfigurer.java:135)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty(PropertySourcesPlaceholderConfigurer.java:132)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:84)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getPropertyAsRawString(PropertySourcesPropertyResolver.java:70)
    at org.springframework.core.env.AbstractPropertyResolver$1.resolvePlaceholder(AbstractPropertyResolver.java:207)
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:153)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:175)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:801)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:962)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:342)
    // SNIP
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.boot.autoconfigure.web.HttpMessageConverters] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectFactory.getObject(DefaultListableBeanFactory.java:1419)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyProvider.get(DefaultListableBeanFactory.java:1436)
    at org.springframework.cloud.netflix.feign.support.SpringDecoder.decode(SpringDecoder.java:57)
    at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:169)
    ... 93 common frames omitted
这发生在
@FeignClient(url=“localhost:8080”)
上。将ribbon与
@FeignClient(“config”)
一起使用完全失败:

Caused by: java.lang.NullPointerException
    at feign.ribbon.LoadBalancingTarget.apply(LoadBalancingTarget.java:91)
    at feign.SynchronousMethodHandler.targetRequest(SynchronousMethodHandler.java:164)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:108)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:96)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:92)
    at com.sun.proxy.$Proxy26.get(Unknown Source)
    at test.MyPropertySourceLocator$1.getProperty(MyPropertySourceLocator.java:32)

我想使用REST访问配置(并因此假装)。当然,可能的解决办法是直接使用feign

引导上下文应该是轻量级的(并且创建速度很快),因此它不是一个完整的
@EnableAutoconfiguration
。要使用
@FeignClient
,您需要导入
FeignAutoConfiguration
(以及任何依赖于它的内容,这并不需要太多IIRC)。

实际上,导入
HttpMessageConvertersAutoConfiguration
就成功了。但我没能让丝带工作。我尝试导入
RibbonAutoConfiguration
假装RibbonClientAutoConfiguration
,但总是失败,因为“负载平衡器没有客户端可用的服务器”如果“负载平衡器没有客户端可用的服务器”,那么您可能没有给它一个物理地址。我认为对于bootstrap来说,可能最好不要依赖更高级别的工具,比如Feign,所以很好你有了一些东西可以工作。我在application.yml和bootstrap.yml中有一个列表,但在bootstrap期间这两个工具都不可用。反正我也不打算用ribbon,所以我就把它忘了。无论如何,谢谢你。
Caused by: java.lang.NullPointerException
    at feign.ribbon.LoadBalancingTarget.apply(LoadBalancingTarget.java:91)
    at feign.SynchronousMethodHandler.targetRequest(SynchronousMethodHandler.java:164)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:108)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:96)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:92)
    at com.sun.proxy.$Proxy26.get(Unknown Source)
    at test.MyPropertySourceLocator$1.getProperty(MyPropertySourceLocator.java:32)