在微服务系统中,我有一个带有 annotation 的接口 @AuthorizedFeignClient(name="send-email", url="http://localhost:8080/utils/api/email")
,在开发环境中它可以正常工作,但是,在 Docker 环境中,我需要url参数来让 Docker 容器名称代替 localhost 才能在 Docker 环境中工作。
我尝试在 application-prod.yml 中添加配置:
containers-host:
gateway: jhipster-gateway
在注释中我这样说:
@AuthorizedFeignClient(name="send-email", url="http://${containers-host.gateway}:8080/utils/api/email")
但是,当尝试生成 .war 时,它会失败:
org.springframework.beans.factory.BeanDefinitionStoreException:在 null 中定义的名称为“com.sistema.service.util.EmailClient”的无效 bean 定义:无法解析值“http://${ 中的占位符“containers-host.gateway”容器-host.gateway}:8080/utils/api/email"; 嵌套异常是 java.lang.IllegalArgumentException:无法解析值“http://${containers-host.gateway}:8080/utils/api/email”中的占位符“containers-host.gateway”2018-11-08 11 :25:22.101 错误 64 --- [main] osboot.SpringApplication: 应用程序运行失败
org.springframework.beans.factory.BeanDefinitionStoreException:在 null 中定义的名称为 'com.sistema.service.util.EmailClient' 的无效 bean 定义:无法解析值“http://${ 中的占位符'containers-host.gateway'容器-host.gateway}:8080/utils/api/email"; 嵌套异常是 java.lang.IllegalArgumentException:无法解析值“http://${containers-host.gateway}:8080/utils/api/email”中的占位符“containers-host.gateway”
如何根据服务运行的环境配置来设置服务的主机名?
我失败的代码如下所示:
@AuthorizedFeignClient(name="send-email", url="http://${containers-host.gateway}:8080/utils/api/email")
public interface EmailClient {
@PostMapping("/send-email")
void sendEmail(String mail);
}