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

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

场景

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以及初始化线程池

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

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

    @Resourceprivate 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;@Resourceprivate Environment environment;@Resourceprivate HttpRequestExecutorTestHandler handler;/*** 初始化URL数据*/@PostConstructpublic 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、运行效果

相关文章:

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

场景 SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)&#xff1a; SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客 Java中ExecutorService线程池的使用(Runnable和Callable多…...

java实现局域网内视频投屏播放(一)背景/需求

一 背景 我们在用电视上投屏电影或者电视剧时&#xff0c;如果没有vip&#xff0c;用盗版电影网站投屏的话会有两个问题&#xff0c;1:他们网站没有投屏功能。2:卡&#xff01;&#xff01;&#xff01;。还有就是不能随心所欲的设置自己先要自动播放的视频列表&#xff08;如…...

【Spring】手写一个简易starter

需求&#xff1a; 自定义一个starter&#xff0c;里面包含一个TimeLog注解和一个TimeLogAspect切面类&#xff0c;用于统计接口耗时。要求在其它项目引入starter依赖后&#xff0c;启动springboot项目时能进行自动装配。 步骤&#xff1a; &#xff08;1&#xff09;引入pom依赖…...

Spring Cloud Alibaba实践 --Sentinel

sentinel介绍 Sentinel的官方标题是&#xff1a;分布式系统的流量防卫兵。从名字上来看&#xff0c;很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件&#xff0c;如果熟悉Spring Cloud的用户&#xff0c;第一反应应该就是Hystrix。但是比较可惜的是Netflix…...

使用Mockjs模拟(假数据)接口(axios)

一、什么是MockJs Mock.js官网 Mock.wiki.git mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。 二、安装mockjs npm install mockjs 三、 MockJs使用 简单使用&#xff1a; // 使用…...

【面试常考题目】五种方法解决“如何在n个无序数组中找出它的中位数(java)”问题

1.3 从N个数组中找到中位数&#xff0c;每一个数组可能乱序 在LeetCode上&#xff0c;"寻找多个数组的中位数"这类问题通常是由两个数组合并中位数问题&#xff08;即LeetCode第4题&#xff09;的变种或扩展。直接对应于多个数组合并后寻找中位数的题目在LeetCode上…...

打包CSS

接上一个打包HTML继续进行CSS的打包 1.在之前的文件夹里的src文件夹创建一个css文件 2.在浏览器打开webpack——>中文文档——>指南——>管理资源——>加载CSS 3.复制第一句代码到终端 4.复制下图代码到webpack.config.js脚本的plugins&#xff1a;[.....]内容下…...

Java项目开发,业务比较复杂如何减少bug

Java项目开发&#xff0c;业务比较复杂如何减少bug 当Java开发工作涉及复杂业务时&#xff0c;可以采取以下方法来减少bug的数量&#xff1a; 1、深入了解业务需求 充分了解业务需求&#xff0c;与业务人员进行充分的沟通和交流&#xff0c;确保对需求的理解正确。在需求分析…...

[EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Atermiter X99 Turbo D4 处理器 Intel Xeon E5-2630v3 已驱动内存Desktop DDR4 2666 MHz已驱动硬盘Netac NV7000已驱动显卡AMD Radeon RX 5700xt已驱动声卡瑞昱 英特尔 High Definition Audio 控制器ALC897已驱动网卡LucyRTL8125已驱动无线网卡蓝牙Broad…...

map.getOrDefault

map.getOrDefault 是 Java 中的一个方法&#xff0c;用于从 Map 中获取指定键的值&#xff0c;如果键不存在&#xff0c;则返回指定的默认值。 方法签名如下&#xff1a; V getOrDefault(Object key, V defaultValue) 其中&#xff0c;key 是要获取值的键&#xff0c;defaul…...

vue3移动端脚手架(纯净,集成丰富)

概述 一个纯净的移动端框架 &#xff0c;用到了 Vue3 vuex Vite3 Vant3 sass eslint stylelint htmlhint husky commitlint axios axios-adapter VConsole 自定义全局 loading &#xff0c;自定义函数式 dialog &#xff08;api模仿微信小程序&#xff09;&#x…...

HarmonyOS应用开发-手写板

这是一个基于HarmonyOS做的一个手写板应用&#xff0c;只需要简单的几十行代码&#xff0c;就可以实现如下手写功能以及清空画布功能。 一、先上效果图&#xff1a; 二、上代码 Entry Component struct Index {//手写路径State pathCommands: string ;build() {Column() {//…...

Python中的logging介绍

Python中的logging模块是一个强大的、灵活的、可配置的日志记录系统。它允许你在不修改源代码的情况下记录错误和调试信息&#xff0c;同时也可以对日志信息进行各种处理&#xff0c;例如写入到文件、输出到控制台、记录到数据库等。 logging模块提供了一种用于日志记录的通用接…...

ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

JDBC 允许CH通过JDBC连接到外部数据库。 要实现JDBC连接&#xff0c;CH需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。 该引擎支持Nullable数据类型。 建表 CREATE TABLE [IF NOT EXISTS] [db.]table_name (columns list... ) ENGINE JDBC(datasource_uri, exte…...

利用CRM系统分析客户行为:精细掌握市场动态

CRM客户关系管理软件在客户行为分析方面发挥着重要作用。通过CRM客户管理系统&#xff0c;企业可以更加便捷地统计客户的行为特征、消费习惯和消费需求&#xff0c;从而洞察市场趋势&#xff0c;帮助企业管理者精准制定营销策略。本文将通过购物篮分析的例子向您介绍CRM客户管理…...

15Linux、GIT及相关相似面试题、PostMan

Linux和git相似是命令相关的层次结构相似 Linux Linux Linux常用操作_linux操作-CSDN博客 程序员常用的10个Linux命令_简介linux系统中的10个常用命令及功能-CSDN博客 help help 命令 &#xff1a;获得 shell 内置命令的帮助信息&#xff0c;常用形式 help cd ls --help …...

游戏中小地图的制作__unity基础开发教程

小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在&#xff0c;那么地图视角是如何让实现的呢&#xff1f; 这一期教大家制作一个简易的小地图。 &#x1f496;点关注&#xff0c;不迷路。 老样子&#xff0c;我们还…...

​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​

源代码&#xff1a; Lib/sqlite3/ SQLite 是一个C语言库&#xff0c;它可以提供一种轻量级的基于磁盘的数据库&#xff0c;这种数据库不需要独立的服务器进程&#xff0c;也允许需要使用一种非标准的 SQL 查询语言来访问它。一些应用程序可以使用 SQLite 作为内部数据存储。可…...

做数据分析为何要学统计学(0)——如果提高数据样本质量

样本是数据分析的关键&#xff0c;直接影响研究成果质量。如果样本质量不高&#xff0c;即使使用再好的分析方法&#xff0c;也无法得出理想的结论。所以数据学科圈里有句名言“数据比方法更重要”。所以如何提高数据样本的质量是保证研究成果质量的第一步&#xff0c;虽然这一…...

ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm

一、显卡驱动安装 执行nvidia-smi查看安装情况 二、cuda安装 cuda官网下载cuda_11.6.2_510.47.03_linux.run&#xff0c;安装执行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安装项&#xff0c;驱动不用安装&#xff0c;即第一项&#xff08;Driver&#xff09;&#xff…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...