为生成的 api rest 客户端配置连接和读取超时
Configuring connection and read timeouts for a generated api rest client
我正在使用 swagger-codegen-maven-plugin 生成一个 api 休息客户端。我正在使用 resttemplate 库,我的 pom.xml 配置如下所示。
<build>
<plugins>
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/../swagger.yml</inputSpec>
<language>java</language>
<generateApis>true</generateApis>
<generateApiTests>false</generateApiTests>
<generateSupportingFiles>true</generateSupportingFiles>
<generateModelDocumentation>false</generateModelDocumentation>
<modelPackage>my.base.package.here</modelPackage>
<apiPackage>my.base.api.package.here</apiPackage>
<modelNamePrefix>MyApiPrefix</modelNamePrefix>
<configOptions>
<library>resttemplate</library>
<sourceFolder>src/gen/java</sourceFolder>
<java8>true</java8>
<dateLibrary>java8</dateLibrary>
<hideGenerationTimestamp>true</hideGenerationTimestamp>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
客户端生成成功。现在我在 spring 启动应用程序中使用此客户端,我需要配置连接超时和读取超时值。
我很惊讶地发现生成的 ApiClient 上没有这两个属性的 setter。所以我不得不想出一个解决方法,使用 RestTemplateBuilder 来做到这一点。它看起来像这样:
@Configuration
public class MyApiClientConfiguration {
@Autowired
public MyApiClientConfiguration(
final RestTemplate restTemplate,
final RestTemplateBuilder restTemplateBuilder
) {
restTemplateBuilder
.setConnectTimeout(connectTimeoutValue)
.setReadTimeout(readTimeoutValue)
.configure(restTemplate);
ApiClient apiClient = new ApiClient(restTemplate);
MyApiPrefixApi.setApiClient(apiClient);
}
}
configure
方法的文档没有说太多:
配置
public T 配置(T restTemplate)
Configure the provided RestTemplate instance using this builder.
这是使用 resttemplate 库时配置超时的标准方法吗? 更新: 我的实际实现不起作用(似乎 ResttemplateBuilder 自己的配置以错误的方式干扰了自动装配的 RestTemplate(我试图通过构建器进一步配置))配置。其他库(例如jersey)生成的api客户端提供了一个setter直接配置超时使用:
apiClient.setConnectTimeout(timeoutValue);
虽然使用 configure 方法不起作用,但可以通过使用 RestTemplateBuilder 的 build[= 创建 RestTemplate bean 来配置超时值18=]方法。
@Bean
public RestTemplate restTemplate(
RestTemplateBuilder restTemplateBuilder,
final int serviceConnectionTimeout,
final int serviceReadTimeout
) {
return restTemplateBuilder
.setConnectTimeout(serviceConnectionTimeout)
.setReadTimeout(serviceReadTimeout)
.build();
}
参考:Spring RestTemplate timeout
我正在使用 swagger-codegen-maven-plugin 生成一个 api 休息客户端。我正在使用 resttemplate 库,我的 pom.xml 配置如下所示。
<build>
<plugins>
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/../swagger.yml</inputSpec>
<language>java</language>
<generateApis>true</generateApis>
<generateApiTests>false</generateApiTests>
<generateSupportingFiles>true</generateSupportingFiles>
<generateModelDocumentation>false</generateModelDocumentation>
<modelPackage>my.base.package.here</modelPackage>
<apiPackage>my.base.api.package.here</apiPackage>
<modelNamePrefix>MyApiPrefix</modelNamePrefix>
<configOptions>
<library>resttemplate</library>
<sourceFolder>src/gen/java</sourceFolder>
<java8>true</java8>
<dateLibrary>java8</dateLibrary>
<hideGenerationTimestamp>true</hideGenerationTimestamp>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
客户端生成成功。现在我在 spring 启动应用程序中使用此客户端,我需要配置连接超时和读取超时值。
我很惊讶地发现生成的 ApiClient 上没有这两个属性的 setter。所以我不得不想出一个解决方法,使用 RestTemplateBuilder 来做到这一点。它看起来像这样:
@Configuration
public class MyApiClientConfiguration {
@Autowired
public MyApiClientConfiguration(
final RestTemplate restTemplate,
final RestTemplateBuilder restTemplateBuilder
) {
restTemplateBuilder
.setConnectTimeout(connectTimeoutValue)
.setReadTimeout(readTimeoutValue)
.configure(restTemplate);
ApiClient apiClient = new ApiClient(restTemplate);
MyApiPrefixApi.setApiClient(apiClient);
}
}
configure
方法的文档没有说太多:
配置
public T 配置(T restTemplate)
Configure the provided RestTemplate instance using this builder.
这是使用 resttemplate 库时配置超时的标准方法吗? 更新: 我的实际实现不起作用(似乎 ResttemplateBuilder 自己的配置以错误的方式干扰了自动装配的 RestTemplate(我试图通过构建器进一步配置))配置。其他库(例如jersey)生成的api客户端提供了一个setter直接配置超时使用:
apiClient.setConnectTimeout(timeoutValue);
虽然使用 configure 方法不起作用,但可以通过使用 RestTemplateBuilder 的 build[= 创建 RestTemplate bean 来配置超时值18=]方法。
@Bean
public RestTemplate restTemplate(
RestTemplateBuilder restTemplateBuilder,
final int serviceConnectionTimeout,
final int serviceReadTimeout
) {
return restTemplateBuilder
.setConnectTimeout(serviceConnectionTimeout)
.setReadTimeout(serviceReadTimeout)
.build();
}
参考:Spring RestTemplate timeout