长沙市芙蓉区关于疫情最新消息郑州官网网站优化公司
jira超时时间没有提供公开接口配置,那只能上魔改了
一般来说也就是三样,继承 放射 改源码
一、找代码定义
先看常见的创建client的代码
JiraRestClient restClient = AsynchronousJiraRestClientFactory().createWithBasicHttpAuthentication(jiraServerUri, username, password);
跟踪实现代码
@Overridepublic JiraRestClient createWithBasicHttpAuthentication(final URI serverUri, final String username, final String password) {return create(serverUri, new BasicHttpAuthenticationHandler(username, password));}
实际调用上面的方法
@Overridepublic 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() {@Overridepublic Object getThreadLocalContext() {return null;}@Overridepublic void setThreadLocalContext(Object context) {}@Overridepublic void clearThreadLocalContext() {}});final HttpClient httpClient = defaultHttpClientFactory.create(options);return new AtlassianHttpClientDecorator(httpClient, authenticationHandler) {@Overridepublic 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);// 创建自定义的 HttpClientOptionsHttpClientOptions options = createCustomHttpClientOptions();// 创建 CustomAsynchronousJiraRestClientFactory 实例并传递 HttpClientOptionsCustomAsynchronousJiraRestClientFactory factory = new CustomAsynchronousJiraRestClientFactory(options);// 创建 JiraRestClientreturn 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);