当前位置: 首页 > news >正文

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);

相关文章:

  • Excel·VBA江西省预算一体化工资表一键处理
  • 【LeetCode 热题 100】11. 盛最多水的容器 | python 【中等】
  • Unity Shader编程】之基础纹理
  • Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL
  • MySQL:CRUD(增删查改)
  • 鸿蒙Next-应用检测、安装以及企业内部商店的实现
  • 日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(19):(1)家族の呼び方(よびかた):家族人物(2)助词练习
  • FreeRTOS任务状态查询
  • 数据库原理5
  • JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件
  • Greenplum6.19集群搭建
  • 【云岚到家】-实战问题(上)
  • ubuntu 20.04 C++ 源码编译 cuda版本 opencv4.5.0
  • STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步
  • 人工智能与深度学习的应用案例解析及代码实现
  • Ae 效果详解:VR 色差
  • 计算机视觉cv2入门之图像的读取,显示,与保存
  • 【江协科技STM32】ADC数模转换器-学习笔记
  • vue3 vite项目安装eslint
  • MATLAB程序代编液压系统电机非线性滑膜伺服模糊控制simulink仿真
  • 在家做网站设计挣钱吗/厦门网站seo
  • 网站建设数据库的购买/网络营销平台
  • 做化工外贸需要那些网站/什么是关键词搜索
  • 中国建设工程造价管理协会网站简称/chrome浏览器
  • 惠州营销网站建设公司/媒体发稿公司
  • 网站建设座谈会上的发言/精准推广引流5000客源