【发布时间】:2023-02-02 20:37:16
【问题描述】:
我需要从 application.properties 文件提供超时,但在初始化时失败,因为尚未加载属性。加载它们的最佳做法是什么?
@Configuration
@AllArgsConstructor
@Slf4j
public class Config {
@Value("${connectionTimeout}")
int connectionTimeout;
@Value("${responseTimeout}")
int responseTimeout;
@Bean
public ClientHttpConnector getConnector() {
HttpClient client = HttpClient.create();
client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
.responseTimeout(Duration.ofMillis(responseTimeout));
return new ReactorClientHttpConnector(client);
}
@Bean
public WebClient webClient() {
return WebClient.builder().defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE)
.clientConnector(getConnector())
.build();
}
正如其他类似帖子中所建议的,我尝试使用@ConfigurationProperties,但这根本不起作用。有没有一些我不知道的更简单的方法来加载它们?
【问题讨论】:
-
您可以尝试将这些值作为 Bean 方法参数传递:
public ClientHttpConnector getConnector(@Value("${connectionTimeout}") int connectionTimeout, @Value("${responseTimeout}") int responseTimeout) { .. } -
当我在这之后创建 WebClient 时,我传递给 getConnector() 的值是什么,因为它现在需要这两个参数?
-
还将相同的值传递给您的
webClient()bean,然后将它们传递给getConnector()
标签: java spring spring-boot dependency-injection