java的jiraapi设置超时时间
jira超时时间没有提供公开接口配置,那只能上魔改了
一般来说也就是三样,继承 放射 改源码
一、找代码定义
先看常见的创建client的代码
JiraRestClient restClient = AsynchronousJiraRestClientFactory().createWithBasicHttpAuthentication(jiraServerUri, username, password);
跟踪实现代码
@Override
public JiraRestClient createWithBasicHttpAuthentication(final URI serverUri, final String username, final String password) {
return create(serverUri, new BasicHttpAuthenticationHandler(username, password));
}
实际调用上面的方法
@Override
public JiraRestClient create(final URI serverUri, final AuthenticationHandler authenticationHandler) {
final DisposableHttpClient httpClient = new AsynchronousHttpClientFactory()
.createClient(serverUri, authenticationHandler);
return new AsynchronousJiraRestClient(serverUri, httpClient);
}
这个里面有个AsynchronousHttpClientFactory.createClient
点进去定义如下
public DisposableHttpClient createClient(final URI serverUri, final AuthenticationHandler authenticationHandler) {
final HttpClientOptions options = new HttpClientOptions();
final DefaultHttpClientFactory defaultHttpClientFactory = new DefaultHttpClientFactory(new NoOpEventPublisher(),
new RestClientApplicationProperties(serverUri),
new ThreadLocalContextManager() {
@Override
public Object getThreadLocalContext() {
return null;
}
@Override
public void setThreadLocalContext(Object context) {
}
@Override
public void clearThreadLocalContext() {
}
});
final HttpClient httpClient = defaultHttpClientFactory.create(options);
return new AtlassianHttpClientDecorator(httpClient, authenticationHandler) {
@Override
public void destroy() throws Exception {
defaultHttpClientFactory.dispose(httpClient);
}
};
}
代码里的HttpClientOptions 这个类就是用来定义超时间的
private long connectionTimeout = 5 * 1000;
private long socketTimeout = 20 * 1000;
private long requestTimeout = 30 * 3000;
二、魔改实现设置超时时间
改造超时时间,这里使用继承
定义CustomAsynchronousJiraRestClientFactory继承AsynchronousJiraRestClientFactory支持传入HttpClientOptions
CustomAsynchronousJiraRestClientFactory.java
import com.atlassian.httpclient.api.factory.HttpClientOptions;
import com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory;
public class CustomAsynchronousJiraRestClientFactory extends AsynchronousJiraRestClientFactory {
private final HttpClientOptions options;
public CustomAsynchronousJiraRestClientFactory(HttpClientOptions options) {
super();
this.options = options;
}
protected HttpClientOptions createHttpClientOptions() {
return options;
}
}
自定义JiraClientFactory,创建时将options传入上面的factory,后续无差别
JiraClientFactory.java
import com.atlassian.httpclient.api.factory.HttpClientOptions;
import com.atlassian.jira.rest.client.api.JiraRestClient;
import java.net.URI;
import java.util.concurrent.TimeUnit;
public class JiraClientFactory {
public static JiraRestClient createJiraRestClient(String jiraUrl, String username, String password) {
URI uri = URI.create(jiraUrl);
// 创建自定义的 HttpClientOptions
HttpClientOptions options = createCustomHttpClientOptions();
// 创建 CustomAsynchronousJiraRestClientFactory 实例并传递 HttpClientOptions
CustomAsynchronousJiraRestClientFactory factory = new CustomAsynchronousJiraRestClientFactory(options);
// 创建 JiraRestClient
return factory.createWithBasicHttpAuthentication(uri, username, password);
}
public static HttpClientOptions createCustomHttpClientOptions() {
HttpClientOptions options = new HttpClientOptions();
options.setConnectionTimeout(10, TimeUnit.SECONDS); // 设置连接超时时间为10秒
options.setSocketTimeout(30, TimeUnit.SECONDS); // 设置读取超时时间为30秒
options.setRequestTimeout(60, TimeUnit.SECONDS); // 设置请求超时时间为60秒
return options;
}
}
调用示例
JiraRestClient jiraRestClient1 = JiraClientFactory.createJiraRestClient(jiraUrl, jiraUsername, jiraPassword);