FeignClient名称占位符



我有一个FeignClient接口,我想从application.yml文件加载它的名称,所以我这样做了:

@FeignClient(name = "${edgeServer}", configuration = BeansConfiguration.class)

在我的yml文件中:

edgeServer: edge-server

但我在运行时遇到了一个异常:

java.lang.IllegalStateException:服务id不是合法的主机名(${edgeServer})位于org.springframework.util.Assert.state(Assert.java:70)~[spring-core-4.3.10.RELEASE.jar:4.3.10.RELEASE]网址:org.springframework.cloud.netflix.foreign.FignClientsRegistrar.getName(FeignClientsRegisterr.java:238)~[spring-cloud-netflix-core-1.3.1.REASE.jar:1.3.1.REASE]网址:org.springframework.cloud.netflix.foreign.FignClientsRegistrar.registerFeignClient(FeignClientsRegisterr.java:181)~[spring-cloud-netflix-core-1.3.1.RELEASE.jar:1.3.1.REASE]网址:org.springframework.cloud.netflix.foreign.FignClientsRegister.registerFeignClients(FeignClientsRegistrar.java:167)~[spring-cloud-netflix-core-1.3.1.RELEASE.jar:1.3.1.RRELEASE]位于org.springframework.cloud.netflix.foreign.FignClientsRegisterr.registerBeanDefinitions(FeignClientsRegistrar.java:92)~[spring-cloud-netflix-core-1.3.1.RELEASE.jar:1.3.1.REASE]位于org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionFromRegistrars(ConfigurationClassBeanDefinitionReader.java:359)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:143)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于org.springframework.context.annotation.ConfigurationClassPostProcessor.productConfigBeanDefinitions(ConfigurationClassPostProcessProcessor.java:320)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcess.java:228)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistration Delegate.java:270)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistration\Delegate.java:93)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]网址:org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]

那么,这个问题有什么解决方案吗?否则,我如何从yml属性中注入我的name属性?

感谢

更新了您的线路

@FeignClient(name = "${edgeServer}", configuration = BeansConfiguration.class)

带有

@FeignClient(name = @Value("${edgeServer}"), configuration = BeansConfiguration.class)

希望这能奏效。

我使用了属性value而不是name,这对我来说很好。查看下面的代码片段。

application.yml-->
stock:
service: STOCK-SERVICE

Feign client interface-->
@FeignClient(value="${stock.service:STOCK-SERVICE}")

注意-如果application.yml中未配置stock.service,则在外国客户端配置的默认配置将被视为

您在类的顶部添加了@PropertySource("classpath:applciation.yml")吗?

最新更新