java - 非网页 Spring Boot 应用中的 FeignClient 配置
问题描述
我有一个 Spring Boot 应用程序,它作为 Web 应用程序或基于spring.main.web-application-type
参数的控制台应用程序运行。
应用程序.java
@EnableFeignClients
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
和 ConsoleApplication.java
@Component
@ConditionalOnNotWebApplication
public class ConsoleApplication implements ApplicationRunner {
private final SomeFeignClient someFeignClient;
public ConsoleApplication(SomeFeignClient someFeignClient) {
this.someFeignClient = someFeignClient;
}
@Override
public void run(ApplicationArguments args) {
someFeignClient.someMethod(); // This calls feign client method
}
}
SomeFeignClient.java
@FeignClient(name = "my-api", url = "http://example.com", configuration = MyFeignConfiguration.class)
public interface SomeFeignClient {
@RequestLine("GET /some/api")
String someMethod();
}
MyFeignConfiguration.java
// No @Configuration annotation
public class MyFeignConfiguration {
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
@Bean
public DefaultAccessTokenRequest accessTokenRequest() {
return new DefaultAccessTokenRequest();
}
@Bean
public DefaultOAuth2ClientContext context(AccessTokenRequest accessTokenRequest) {
return new DefaultOAuth2ClientContext(accessTokenRequest);
}
@Bean
public ClientCredentialsResourceDetails resourceDetails() {
ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
resourceDetails.setClientId("CLIENT_ID");
resourceDetails.setClientSecret("CLIENT_SECRET");
resourceDetails.setAccessTokenUri("TOKEN_URL");
resourceDetails.setGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS.getValue());
return resourceDetails;
}
@Bean
public RequestInterceptor feignRequestInterceptor(OAuth2ClientContext context, OAuth2ProtectedResourceDetails details) {
return new OAuth2FeignRequestInterceptor(context, details);
}
}
MyFeignConfiguration.java
客户端在作为 Web 应用程序 () 运行时工作并获取配置,但在作为控制台应用程序 ( ) 运行并使用默认配置spring.main.web-application-type=SERVLET
时不会。spring.main.web-application-type=NONE
我尝试在Spring Cloud OpenFeign 文档和Spring Cloud 文档中进行搜索,但找不到任何具体的内容。
有没有人遇到过类似的情况并知道可能是什么原因造成的?
谢谢。
解决方案
推荐阅读
- javascript - TypeError:模型不是构造函数
- sql-server - 使用 LIKE 关键字获取当前月份记录
- javascript - 图像调整大小不起作用(图像未保存在大小文件夹中(小,中,....)
- java - 如何在我的编码 android studio 项目中实现此代码 setDisplayName?
- magento2 - 提交扩展时如何通过技术审查 - Varnish 错误
- python - 在 Excel 或 Python 中将数字除以日期
- r - 如何将 word.doc 中保存的数据导入 R-studio
- tensorflow - TensorRT 的 PluginFormat 必须是 kNCHW 吗?
- sql-injection - 当我选择 level=5 和 risk=3 时,SQLMap 需要很长时间
- c# - 如何将 json 映射到类模型?