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数据为实体类(时间格式化转换、字段包含中文): SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客 Java中ExecutorService线程池的使用(Runnable和Callable多…...
java实现局域网内视频投屏播放(一)背景/需求
一 背景 我们在用电视上投屏电影或者电视剧时,如果没有vip,用盗版电影网站投屏的话会有两个问题,1:他们网站没有投屏功能。2:卡!!!。还有就是不能随心所欲的设置自己先要自动播放的视频列表(如…...
【Spring】手写一个简易starter
需求: 自定义一个starter,里面包含一个TimeLog注解和一个TimeLogAspect切面类,用于统计接口耗时。要求在其它项目引入starter依赖后,启动springboot项目时能进行自动装配。 步骤: (1)引入pom依赖…...
Spring Cloud Alibaba实践 --Sentinel
sentinel介绍 Sentinel的官方标题是:分布式系统的流量防卫兵。从名字上来看,很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件,如果熟悉Spring Cloud的用户,第一反应应该就是Hystrix。但是比较可惜的是Netflix…...
使用Mockjs模拟(假数据)接口(axios)
一、什么是MockJs Mock.js官网 Mock.wiki.git mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 二、安装mockjs npm install mockjs 三、 MockJs使用 简单使用: // 使用…...
【面试常考题目】五种方法解决“如何在n个无序数组中找出它的中位数(java)”问题
1.3 从N个数组中找到中位数,每一个数组可能乱序 在LeetCode上,"寻找多个数组的中位数"这类问题通常是由两个数组合并中位数问题(即LeetCode第4题)的变种或扩展。直接对应于多个数组合并后寻找中位数的题目在LeetCode上…...
打包CSS
接上一个打包HTML继续进行CSS的打包 1.在之前的文件夹里的src文件夹创建一个css文件 2.在浏览器打开webpack——>中文文档——>指南——>管理资源——>加载CSS 3.复制第一句代码到终端 4.复制下图代码到webpack.config.js脚本的plugins:[.....]内容下…...
Java项目开发,业务比较复杂如何减少bug
Java项目开发,业务比较复杂如何减少bug 当Java开发工作涉及复杂业务时,可以采取以下方法来减少bug的数量: 1、深入了解业务需求 充分了解业务需求,与业务人员进行充分的沟通和交流,确保对需求的理解正确。在需求分析…...
[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 中的一个方法,用于从 Map 中获取指定键的值,如果键不存在,则返回指定的默认值。 方法签名如下: V getOrDefault(Object key, V defaultValue) 其中,key 是要获取值的键,defaul…...
vue3移动端脚手架(纯净,集成丰富)
概述 一个纯净的移动端框架 ,用到了 Vue3 vuex Vite3 Vant3 sass eslint stylelint htmlhint husky commitlint axios axios-adapter VConsole 自定义全局 loading ,自定义函数式 dialog (api模仿微信小程序)&#x…...
HarmonyOS应用开发-手写板
这是一个基于HarmonyOS做的一个手写板应用,只需要简单的几十行代码,就可以实现如下手写功能以及清空画布功能。 一、先上效果图: 二、上代码 Entry Component struct Index {//手写路径State pathCommands: string ;build() {Column() {//…...
Python中的logging介绍
Python中的logging模块是一个强大的、灵活的、可配置的日志记录系统。它允许你在不修改源代码的情况下记录错误和调试信息,同时也可以对日志信息进行各种处理,例如写入到文件、输出到控制台、记录到数据库等。 logging模块提供了一种用于日志记录的通用接…...
ClickHouse(17)ClickHouse集成JDBC表引擎详细解析
JDBC 允许CH通过JDBC连接到外部数据库。 要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。 该引擎支持Nullable数据类型。 建表 CREATE TABLE [IF NOT EXISTS] [db.]table_name (columns list... ) ENGINE JDBC(datasource_uri, exte…...
利用CRM系统分析客户行为:精细掌握市场动态
CRM客户关系管理软件在客户行为分析方面发挥着重要作用。通过CRM客户管理系统,企业可以更加便捷地统计客户的行为特征、消费习惯和消费需求,从而洞察市场趋势,帮助企业管理者精准制定营销策略。本文将通过购物篮分析的例子向您介绍CRM客户管理…...
15Linux、GIT及相关相似面试题、PostMan
Linux和git相似是命令相关的层次结构相似 Linux Linux Linux常用操作_linux操作-CSDN博客 程序员常用的10个Linux命令_简介linux系统中的10个常用命令及功能-CSDN博客 help help 命令 :获得 shell 内置命令的帮助信息,常用形式 help cd ls --help …...
游戏中小地图的制作__unity基础开发教程
小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在,那么地图视角是如何让实现的呢? 这一期教大家制作一个简易的小地图。 💖点关注,不迷路。 老样子,我们还…...
sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块
源代码: Lib/sqlite3/ SQLite 是一个C语言库,它可以提供一种轻量级的基于磁盘的数据库,这种数据库不需要独立的服务器进程,也允许需要使用一种非标准的 SQL 查询语言来访问它。一些应用程序可以使用 SQLite 作为内部数据存储。可…...
做数据分析为何要学统计学(0)——如果提高数据样本质量
样本是数据分析的关键,直接影响研究成果质量。如果样本质量不高,即使使用再好的分析方法,也无法得出理想的结论。所以数据学科圈里有句名言“数据比方法更重要”。所以如何提高数据样本的质量是保证研究成果质量的第一步,虽然这一…...
ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm
一、显卡驱动安装 执行nvidia-smi查看安装情况 二、cuda安装 cuda官网下载cuda_11.6.2_510.47.03_linux.run,安装执行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安装项,驱动不用安装,即第一项(Driver)ÿ…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
