我正在使用Spring Cloud Data Flow Task DSL以编程方式在 Kubernetes 上启动 Spring Cloud Data Flow 任务。
查看spring-cloud-dataflow-rest-client项目的源代码,我可以看到DataFlowClientAutoConfiguration类包含一个RestTemplate
正在运行的实例Autowired
。我想RestTemplate
主要传递我自己的实例,因为我想更改由RestTemplate
为此,我创建了自己的独立 Spring Boot 项目,该项目使用 spring-cloud-dataflow-rest-client 作为依赖项,并RestTempalte
在我的上下文中创建了一个 bean,如下所示:
@SpringBootApplication
public class SpringDataFlowRestClient {
public static void main(String[] args) {
SpringApplication.run(SpringDataFlowRestClient.class, args);
}
}
@Configuration
public class SpringDataFlowRestClientConfiguration {
@Bean
public RestTemplate restTemplate() {
HttpComponentsClientHttpRequestFactory connectionFactory = new HttpComponentsClientHttpRequestFactory();
connectionFactory.setConnectTimeout(300000);
RestTemplate restTemplate = new RestTemplate(connectionFactory);
return restTemplate;
}
}
我的假设是这会增加RestTemplate
5 分钟的连接超时;但是,很明显,我的自定义RestTemplate
实例没有被拾取,DataFlowClientAutoConfiguration
因为我看到许多请求在 30 秒内超时,因为我看到了 504 网关错误。(这就是我想首先增加超时的原因)
我在DataFlowTemplate.java中看到如下注释:
请注意,创建的 RestTemplate 将使用 JDK 的默认超时值。考虑传入自定义 {@link RestTemplate}
问题那么我究竟如何覆盖里面的RestTemplate
实例?Autowired
DataFlowClientAutoConfiguration
.
注意:我尝试public RestTemplate restTemplate(RestTemplateBuilder builder)
在我的配置中使用 bean 方法,但这没有帮助。我试过设置spring.main.allow-bean-definition-overriding=true
。我也尝试使用@Primary
我的RestTemplate
bean 方法。最后,我尝试将sun.net.client.defaultConnectTimeout=300000
其作为环境变量传递。似乎没有任何效果。我相信我已经用尽了所有我能想到的选择。