SpringBoot+线程池实现高频调用http接口并多线程解析json数据

2023-12-16

场景

Springboot+FastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文):

Springboot+FastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客

Java中ExecutorService线程池的使用(Runnable和Callable多线程实现):

Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)_executorservice executorservice = executors.newfix-CSDN博客

Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例:

Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例_threadpoolexecutor创建线程-CSDN博客

在上面的基础上,需要使用定时任务高频调用典第三方http接口并解析返回的json数据为java的list,需要对

list的每个数据进行处理,这里需要用到自定义线程池对每个java对象分别进行处理。

注:

博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客

实现

1、首先在配置文件中添加第三方接口的url

这里是yml文件

​
test:
  #测试多线程请求http接口并解析数据
  http-request-executor:
    url: http://127.0.0.1:4523/m1/2858210-0-default/testFastJson

​

2、新建定时任务类

使用@PostConstruct注解初始化需要的数据,比如获取配置文件中的接口的url以及初始化线程池

    @PostConstruct
    public void initData() {
        HttpRequestExecutorTestHandler.newFixedThreadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() / 2);
        url = Objects.requireNonNull(environment.getProperty("test.http-request-executor.url"));
    }

这里读取配置文件需要引入

    @Resource
    private Environment environment;

然后新建定时任务调用接口,并解析接口返回的json数据,将响应的data字段传给

具体处理数据的类

​
    @Scheduled(fixedRateString = "1000")
    public void taskGetData() {
        String body = "";
        try {
            body = HttpRequest
                    .get("http://127.0.0.1:4523/m1/2858210-0-default/testFastJson")
                    .timeout(20000)
                    .execute()
                    .body();
            UserResDTO userResDTO = JSON.parseObject(body, UserResDTO.class);
            if (userResDTO.getCode() != null && 200!=userResDTO.getCode()) {
                //错误处理
            }else {
                JSONArray data = userResDTO.getData();
                if (StringUtils.isEmpty(data)) {
                    return;
                }
                handler.handleData(data);
            }
        } catch (Exception e) {

        }
    }

​

定时任务类完整实例代码

​
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.test.dto.UserResDTO;
import com.ruoyi.web.handle.HttpRequestExecutorTestHandler;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.Objects;
import java.util.concurrent.Executors;

@Component("HttpRequestExecutorTestTask")
@EnableScheduling
public class HttpRequestExecutorTestTask {

    private String url;

    @Resource
    private Environment environment;

    @Resource
    private HttpRequestExecutorTestHandler handler;

    /**
     * 初始化URL数据
     */
    @PostConstruct
    public void initData() {
        HttpRequestExecutorTestHandler.newFixedThreadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() / 2);
        url = Objects.requireNonNull(environment.getProperty("test.http-request-executor.url"));
    }

    @Scheduled(fixedRateString = "1000")
    public void taskGetData() {
        String body = "";
        try {
            body = HttpRequest
                    .get("http://127.0.0.1:4523/m1/2858210-0-default/testFastJson")
                    .timeout(20000)
                    .execute()
                    .body();
            UserResDTO userResDTO = JSON.parseObject(body, UserResDTO.class);
            if (userResDTO.getCode() != null && 200!=userResDTO.getCode()) {
                //错误处理
            }else {
                JSONArray data = userResDTO.getData();
                if (StringUtils.isEmpty(data)) {
                    return;
                }
                handler.handleData(data);
            }
        } catch (Exception e) {

        }
    }
}

​

3、上面具体进行业务处理的类

import com.alibaba.fastjson.JSONArray;
import com.ruoyi.system.domain.test.dto.UserDTO;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.ExecutorService;

@Component
public class HttpRequestExecutorTestHandler {

    public static ExecutorService newFixedThreadPool;

    public void handleData(JSONArray data) {
        List<UserDTO> userDTOS = data.toJavaList(UserDTO.class);
        for (UserDTO userDTO:userDTOS) {
            newFixedThreadPool.execute(() -> mapperApiData(userDTO));
        }
    }

    //具体业务处理
    private void mapperApiData(UserDTO userDTO){
        System.out.println(userDTO);
    }

}

将接收到的data字段解析成java的list,然后遍历list,每个对象用一个线程具体去处理。

附接口示例数据

{
    "code": "200",
    "data": [
        {
            "id": "63",
            "name": "学指约思但",
            "time_cur": "2009-07-23 02:14:52",
            "地址": "minim sint commodo nisi"
        },
        {
            "id": "19",
            "name": "下农前清时相",
            "time_cur": "2013-10-16 17:32:09",
            "地址": "ullamco aliqua"
        },
        {
            "id": "57",
            "name": "米见放层张圆",
            "time_cur": "2015-10-20 18:40:42",
            "地址": "dolor minim et qui"
        }
    ]
}

4、运行效果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot+线程池实现高频调用http接口并多线程解析json数据 的相关文章

  • 优化数据可视化 Web 应用程序的性能

    我正在重写 3 年前编写的数据可视化网络工具 从那时起 浏览器的 JavaScript 引擎变得更快 所以我正在考虑将部分工作从服务器转移到客户端 在页面上 数据在表格和地图 或图表 中可视化 它使用相同的数据 但以不同的方式 因此准备显示
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • UNIX/MacOS 上静态文件的“临时 Web 服务器”?

    是否有一个像小型网络服务器这样的东西 我可以从命令行调用它 只从本地文件系统获取文件并通过特定端口上的 HTTP 为它们提供服务 我希望能够做这样的事情 cd Sites mysite serve 10 0 1 1 8080 这应该会启动一
  • Java GSON:获取JSONObject下所有键的列表

    我已经将 GSON 作为 Java 中的 JSON 解析器 但密钥并不总是相同 例如 我有以下 JSON 我已经知道的对象 键1 值1 键2 值2 AnotherObject anotherKey1 anotherValue1 anothe
  • HTTP Header Key 可以重复吗?

    在 JAVA HttpUrlConnection 中 请求 Header 设置的主要逻辑代码如下 public synchronized void set String k String v for int i nkeys i gt 0 i
  • Django HTTPS 和 HTTP 会话

    我使用 Django 1 1 1 和 ssl 重定向中间件 通过 HTTPS 创建的会话数据 身份验证等 在站点的 HTTP 部分中不可用 无需将整个站点设置为 HTTPS 即可使其可用的最佳方法是什么 这是设计使然 您无法轻易更改 当通过
  • DbGeography 多边形到 JSON

    我将 DbGeography 多边形存储在数据库中 我的控制器从数据库获取多边形 我需要将它们转换为 JSON var polygons db Areas Where x gt x Type type Select x gt new Vie
  • 从 JSON 文件注入的编译指令 AngularJS

    希望有人能帮助我应对这一挑战 我使用以下命令从服务器请求 JSON 数据 http get 来自服务器的数据返回一个对象 对象中的一个值包含 HTML 标记 该标记使用以下方式注入到页面中 div div 在标记内 有一个名为的自定义指令
  • 如何在 Jackson JSON(反)序列化中使用自定义键类型自定义序列化或转换 Map 属性?

    我正在序列化实例 JsonIdentityInfo generator ObjectIdGenerators PropertyGenerator class property id scope Entity1 class public cl
  • 如何为本机启用现有 WCF 服务的 JSONP?

    我有一个现有的服务 如下方法 AspNetCompatibilityRequirements RequirementsMode AspNetCompatibilityRequirementsMode Allowed ServiceBehav
  • SQL Server 抱怨无效的 json

    我正在使用 Azure 数据工厂和 Azure SQL 数据库编写 ETL 工具 数据工厂捕获映射数据流的输出并将其作为字符串插入到 SQL Server 表 Audit OperationsEventLog 的 StatusMessage
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • Kubernetes / kubectl - “必须指定容器名称”,但看起来确实如此?

    我正在调试 kubectl 的日志输出 其中指出 Error from server BadRequest a container name must be specified for pod postgres operator 49202
  • Angular 2 - Http - 正确忽略空结果

    我有很多处理请求并简单返回 200 的 REST 端点 我注意到将结果映射为错误json 如果我尝试不进行任何类型的映射 我会看到浏览器警告它无法解析 XML 由于不返回任何内容是很常见的 我很好奇我应该如何处理响应 这是一个基本的代码示例
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du
  • 如何在 pandas 中读取并标准化以下 json?

    我在 stackoverflow 中使用 pandas 看到了很多 json 读取问题 但我仍然无法解决这个简单的问题 Data session id 0 X061RFWB06K9V 1 5AZ2X2A9BHH5U unix timesta
  • Ruby on Rails 服务器在 HTTPS POST 请求期间崩溃

    我正在尝试与你沟通城市飞艇API http urbanairship com docs push html broadcast使用 ROR Web 应用程序 在我的控制器中 我有以下代码 require net http require n
  • 使用 WCF 支持“application/x-www-form-urlencoded”发布数据的最佳方式?

    我正在基于 W3C 规范构建 WCF 服务 该规范定义了接受 application x www form urlencoded 发布数据的 RESTful Web 服务端点 默认情况下 WCF 不支持这种类型的消息编码 我发现了许多创建如

随机推荐

  • go-zero 开发之安装 goctl 及 go-zero 开发依赖

    安装 goctl go 版本在 1 16 及以后执行 GO111MODULE on go install github com zeromicro go zero tools goctl latest go 版本在 1 16 之前执行 GO
  • 用RPA轻松实现天猫物流-延迟报备-紧急报备,提升处理效率!

    商业活动中的物流管理的重要性不言而喻 及时准确的物流信息可以提高客户满意度 增加用户粘性 促进二次购买和口碑传播 同时 高效的物流管理也可以减少商家的成本和风险 提高运营效率和竞争力 在天猫物流管理中 延迟报备指的是订单的物流信息没有及时更
  • Docker仓库详解及搭建

    一 Docker仓库是什么 二 Registry工作原理 Pull Image 用户端向index发送请求 index会返回一个location和token 用户端根据返回的token向registry发起请求 registry会校验一笑t
  • 解放双手!拼多多商家最新秘密武器,微信端批量私信rpa机器人来袭!

    在拼多多开店的卖家们都知道 拼多多商家在进行拓客引流工作时 需要频繁进行微信端私信发送操作 耗费大量时间和精力 为了解决这一问题 商家希望可以通过rpa机器人来自动完成私信发送操作 保证每一笔订单都能做好全面的维护和管理 八爪鱼rpa作为一
  • Springboot+FastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目 若依前后端分离版手把手教你本地搭建环境并运行项目 前后端分离项目本地运行 CSDN博客 在上面搭建SpringBoot项目的基础上 并且在项目中引入fastjson hutool lo
  • 四种数据库执行脚本文件导入数据的方式

    执行脚本文件的方式 Mysql mysql执行sql脚本文件的方法 1 在命令行输入mysql uroot h10 235 5 55 p 123456 P3306 lt F hello niuzi sql 2 在命令行输入 source F
  • maven上传jar包到代码仓库

    一 前言 一般被引用的包开发都是要求放在nexus仓库中 等到有jar包服务需要引用该包的时候直接从nexus仓库中获取即可 实现了该引用包的公用 二 代码配置 编辑代码中的pom xml文件配置 vi pom xml
  • Sybase死锁问题查询与解决

    Sybase死锁问题查询与解决 sp who 查看锁表情况 sp lock 查看被锁的表的id号 查看数据库lock配置 sp config number of lock 数据库锁资源使用情况 sp lock 检查锁资源使用情况 selec
  • 用RPA轻松获取亚马逊销售订单详细信息,提升业务效率!

    在电商行业中 获取销售订单的详细信息是一项重要且繁琐的任务 传统的方法是手动登录亚马逊平台 逐个查看订单并复制粘贴相关信息 这不仅耗费大量时间和人力资源 还容易出现错误和遗漏 八爪鱼rpa作为一款强大的机器人流程自动化工具可以帮助企业自动化
  • Linux环境变量执行顺序

    环境变量执行顺序 etc profile etc profile d sh bash profile bashrc etc bashrc
  • 生意参谋竞品分析RPA机器人,让你在商战中立于不败之地

    作为电商企业 了解竞争对手的动态和策略对于制定有效的竞争策略至关重要 但是竞对分析是一项繁琐而费时的工作 往往需要大量的人力和时间投入 在这样的情况下 八爪鱼rpa机器人的出现为电商企业带来了新的解决方案 rpa机器人是一种基于自动化软件的
  • mysql执行带函数命令的sql脚本报错

    一 前言 开发给了一个带函数的sql文件让我执行 但是执行导入时报以下错误 This function has none of DETERMINISTIC NO SQL or READS SQL DATA in its declaratio
  • 万字整理Redis核心知识点

    1 Redis介绍 Redis 是 NoSQL 但是可处理 1 秒 10w 的并发 数据都在内存中 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql 有各类实现他的实现类 我们常用的是 druid 其中对 re
  • mysql开启查询日志

    mysql默认不开启查询日志 可以通过命令查询 show VARIABLES LIKE general 开启查询日志 并更改日志存放目录 不过存放的目录一定要有权限不然会报错 手动创建一下log目录下的mysql目录并赋予权限 mkdir
  • 客户案例 | 博睿数据全面保障昆仑银行业务稳定性

    新兴市场和不断增长的客户群体需求的崛起 正推动着基于互联网模式的财富陪伴 财富管理和财富生态的全新业务范式的形成 昆仑银行是一家总部位于北京 分支机构遍布全国性的城商行 提供广泛的金融产品和服务 主要包括个人银行业务 企业金融服务 资产管理
  • final的安全发布

    final的安全发布 两个关键字 发布 安全 所谓发布通俗一点的理解就是创建一个对象 使这个对象能被当前范围之外的代码所使用 比如Object o new Object 然后接下来使用对象o 但是对于普通变量的创建 之前分析过 大致分为三个
  • Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入

    场景 Windows中通过bat定时执行命令和mysqldump实现数据库备份 Windows中通过bat定时执行命令和mysqldump实现数据库备份 mysqldump bat CSDN博客 Windows上通过bat实现不同数据库之间
  • 程序员那么卷,就业那么难,为什么你还当一名程序员

    前言 这是很早之前看到的一个问题 那时候应该也和今年的情形一样 只不过没有现在这么严重 因为以前只是企业一方面的问题导致的裁员潮流 而到了2023年就不仅仅是因为疫情之类的原因导致企业不景气的问题 更多的是程序员太多了 是的相比较与10年轻
  • 用RPA解放人力,实现未发货订单超时预警

    在电商行业中 未发货订单的处理是一个重要的环节 对于电商企业而言 及时发货是保证客户满意度的关键 然而 由于订单数量庞大 人工处理订单需要耗费大量时间和人力资源 容易出现遗漏和延误的情况 影响客户体验和企业形象 在面对未发货订单超时预警这一
  • SpringBoot+线程池实现高频调用http接口并多线程解析json数据

    场景 Springboot FastJson实现解析第三方http接口json数据为实体类 时间格式化转换 字段包含中文 Springboot FastJson实现解析第三方http接口json数据为实体类 时间格式化转换 字段包含中文 C