如何为同一 Feign 客户端界面的不同配置文件切换 2 个注释
How to have 2 annotation toggled for different profile for the same Feign client Interface
如何为同一个 Feign 客户端界面的不同配置文件切换 2 个注释?
我使用 Feign 客户端界面,当与负载平衡器一起使用时,它具有以下代码 url。这个我称之为Non-Eureka以供参考:
@FeignClient(name = "DEPOSIT-FEIGN-CLIENT", url = "${DEPOSIT-DATA-URL}")
public interface DepositFeignClient {
@RequestMapping(method = RequestMethod.GET, value = "/path/to/api/{accountNumber}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
DepositResponse getDepositDetails(@PathVariable(value = "accountNumber") String accountNumber);
}
另一方面,我在使用 Eureka 和 Spring Cloud Gateway 时使用以下代码:
@FeignClient(value = "ABCD-GATEWAY", path = "${DEPOSIT-EUREKA-APPNAME}")
public interface DepositFeignClient {
@RequestMapping(method = RequestMethod.GET, value = "/path/to/api/{accountNumber}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
DepositResponse getDepositDetails(@PathVariable(value = "accountNumber") String accountNumber);
}
现在我的要求是通过 Spring 配置文件之类的东西来控制它们,这样如果配置文件名称 = "Eureka" Eureka 注释处于活动状态,否则非 Eureka 处于活动状态。
我必须以某种方式在单个接口名称中执行此操作,因为我按如下方式使用它:
private final DepositFeignClient depositFeignClient;
//other code
DepositResponse depResponse =
depositFeignClient.getDepositDetails(accountNumber);
//other code
请让我知道使用 @Profile, @ConditionalOnProperty
或其他任何方法是否有助于解决我的问题。我正在使用 Spring-boot 2.x 和 Java 8
编辑
请注意,在 Eureka 案例中,我使用的是 path
和 value
属性,在非 Eureka 案例中,我使用的是名称和 url 属性,这就是问题所在。
您应该尝试创建 2 个 application-{profileName}.properites
文件,根据需要设置参数,然后 运行 该配置文件处于活动状态。
本文的第 8 部分可能对您也有用:https://www.baeldung.com/spring-profiles
如何为同一个 Feign 客户端界面的不同配置文件切换 2 个注释?
我使用 Feign 客户端界面,当与负载平衡器一起使用时,它具有以下代码 url。这个我称之为Non-Eureka以供参考:
@FeignClient(name = "DEPOSIT-FEIGN-CLIENT", url = "${DEPOSIT-DATA-URL}")
public interface DepositFeignClient {
@RequestMapping(method = RequestMethod.GET, value = "/path/to/api/{accountNumber}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
DepositResponse getDepositDetails(@PathVariable(value = "accountNumber") String accountNumber);
}
另一方面,我在使用 Eureka 和 Spring Cloud Gateway 时使用以下代码:
@FeignClient(value = "ABCD-GATEWAY", path = "${DEPOSIT-EUREKA-APPNAME}")
public interface DepositFeignClient {
@RequestMapping(method = RequestMethod.GET, value = "/path/to/api/{accountNumber}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
DepositResponse getDepositDetails(@PathVariable(value = "accountNumber") String accountNumber);
}
现在我的要求是通过 Spring 配置文件之类的东西来控制它们,这样如果配置文件名称 = "Eureka" Eureka 注释处于活动状态,否则非 Eureka 处于活动状态。
我必须以某种方式在单个接口名称中执行此操作,因为我按如下方式使用它:
private final DepositFeignClient depositFeignClient;
//other code
DepositResponse depResponse =
depositFeignClient.getDepositDetails(accountNumber);
//other code
请让我知道使用 @Profile, @ConditionalOnProperty
或其他任何方法是否有助于解决我的问题。我正在使用 Spring-boot 2.x 和 Java 8
编辑
请注意,在 Eureka 案例中,我使用的是 path
和 value
属性,在非 Eureka 案例中,我使用的是名称和 url 属性,这就是问题所在。
您应该尝试创建 2 个 application-{profileName}.properites
文件,根据需要设置参数,然后 运行 该配置文件处于活动状态。
本文的第 8 部分可能对您也有用:https://www.baeldung.com/spring-profiles