@FeignClient注解 中屬性 contextId使用
@FeignClient注解 中屬性 contextId
比如我們有個user服務,但user服務中有很多個接口,我們不想將所有的調用接口都定義在一個類中,比如:
Client 1
@FeignClient(name = "optimization-user")
public interface UserRemoteClient {
@GetMapping("/user/get")
public User getUser(@RequestParam("id") int id);
}
Client 2
@FeignClient(name = "optimization-user")
public interface UserRemoteClient2 {
@GetMapping("/user2/get")
public User getUser(@RequestParam("id") int id);
}
這種情況下啟動就會報錯了,因為Bean的名稱沖突了,具體錯誤如下:
Description:
The bean 'optimization-user.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
解決方案可以增加下面的配置,作用是允許出現beanName一樣的BeanDefinition。
spring.main.allow-bean-definition-overriding=true
另一種解決方案就是為每個Client手動指定不同的contextId,這樣就不會沖突了。
上面給出了Bean名稱沖突后的解決方案,下面來分析下contextId在Feign Client的作用,在注冊Feign Client Configuration的時候需要一個名稱,名稱是通過getClientName方法獲取的
來源:https://blog.csdn.net/sinat_36454672/article/details/105457670