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、運行效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208423.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MindOpt APL:一款適合優化問題數學建模的編程語言

什么是建模語言 建模語言是一種描述信息或模型的編程語言&#xff0c;在運籌優化領域&#xff0c;一般是指代數建模語言。 比如要寫一個線性規劃問題的建模和求解&#xff0c;可以采用C、Python、Java等通用編程語言來實現計算機編程&#xff08;碼代碼&#xff09;&#xff0…

nodejs微信小程序+python+PHP的黃山旅游景點購票系統設計與實現-計算機畢業設計推薦

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 28 章:圣杯 = 專家 + ChatGPT 的協同作用

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 28 章&#xff1a;圣杯 專家 ChatGPT 的協同作用 ? 這就像是從 ChatGPT 或其他生成式人工智能中獲得高質量答案的圣杯。因為光知道怎么問&#xff08;提示工程技術&#xff09;還不夠&#xff0c;還要知…

harmonyOS開發技巧(二)——沉浸式以及狀態欄高

1. 設置沉浸式&#xff1a;win.setWindowLayoutFullScreen(true); 2. 獲取狀態欄的高&#xff1a;win.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM)以及win.on(avoidAreaChange, (data) > {})。 import UIAbility from ohos.app.ability.UIAbility; import wind…

聯邦多任務蒸餾助力多接入邊緣計算下的個性化服務 | TPDS 2023

聯邦多任務蒸餾助力多接入邊緣計算下的個性化服務 | TPDS 2023 隨著移動智能設備的普及和人工智能技術的發展,越來越多的分布式數據在終端被產生與收集&#xff0c;并以多接入邊緣計算(MEC)的形式進行處理和分析。但是由于用戶的行為模式與服務需求的多樣,不同設備上的數據分布…

復亞消防無人機 智能守護浙江安防

在黨中央高度重視防災減災救災工作的背景下&#xff0c;浙江省深化消防救援保障體系建設&#xff0c;借助智慧消防舉措&#xff0c;提高了城市的戰勤保障能力。特別是在古城區&#xff0c;復亞助力浙江打造智慧消防系統&#xff0c;通過消防無人機全自動飛行系統&#xff0c;成…

ALTERNET STUDIO 9.1 Crack

ALTERNET STUDIO 9.1 發布 宣布 AlterNET Studio 9.1 版本今天上線。AlterNET Studio 9.0 是一個中期更新&#xff0c;重點是改進我們所有的組件庫。 以下是 AlterNET Studio 9.1 的發布亮點&#xff1a; Roslyn C# 和 Visual Basic 解析器現在支持代碼修復/代碼重構。 代碼修復…

全景萬店通打造掌上智慧生活助手,助力店鋪全景引流

隨著網絡經濟的崛起&#xff0c;新一代的消費群體的消費習慣逐漸變得富有個性化&#xff0c;因此他們對于傳統的營銷方式具有視覺疲勞&#xff0c;傳統廣告的效果也越發微小&#xff0c;但是請明顯來代言&#xff0c;成本又十分高昂&#xff0c;那么還有什么引流好方法呢&#…

MySQL之數據庫的創建指令

創建數據庫 #創建數據庫指令&#xff1a; CREATE DATABASE hsp_db1 #創建名字為關鍵字的數據庫&#xff0c;為規避關鍵字&#xff0c;可以使用反引號 CREATE DATABASE CREATE#刪除數據庫指令&#xff1a; DROP DATABASE hsp_db1 DROP DATABASE CREATE如果不指定在這里插入代碼片…

Linux--學習記錄(2)

解壓命令&#xff1a; gzip命令&#xff1a; 參數&#xff1a; -k&#xff1a;待壓縮的文件會保留下來&#xff0c;生成一個新的壓縮文件-d&#xff1a;解壓壓縮文件語法&#xff1a; gzip -k pathname(待壓縮的文件夾名)gzip -kd name.gz&#xff08;待解壓的壓縮包名&#x…

Python中的深拷貝和淺拷貝的區別

目錄 一、深拷貝和淺拷貝的概念 二、Python中的深拷貝和淺拷貝實現 三、深拷貝和淺拷貝的區別及適用場景 四、如何選擇深拷貝和淺拷貝 五、總結 在Python中&#xff0c;深拷貝和淺拷貝是非常重要的概念&#xff0c;它們在處理對象和數據結構時有著截然不同的行為。理解深拷…

MySQL-DATE_FORMAT()函數

在 SQL 中&#xff0c;DATE_FORMAT() 函數是用于將日期時間值格式化為指定格式的函數。它允許你根據自己的需求將日期時間值轉換成各種不同的字符串表示形式。以下是 DATE_FORMAT() 函數的用法和示例&#xff1a; DATE_FORMAT() 函數的基本用法&#xff1a; DATE_FORMAT() 函…

概率測度理論方法(第 2 部分)

一、說明 歡迎回到這個三部曲的第二部分&#xff01;在第一部分中&#xff0c;我們為測度論概率奠定了基礎。我們探索了測量和可測量空間的概念&#xff0c;并使用這些概念定義了概率空間。在本文中&#xff0c;我們使用測度論來理解隨機變量。 作為一個小回顧&#xff0c;在第…

Azure云WAF服務的CRS規則和DRS規則區別

在Azure中&#xff0c;WAF&#xff08;Web Application Firewall&#xff09;是一種用于保護 Web 應用程序免受常見 Web 攻擊的服務。WAF 支持兩種類型的規則&#xff1a;CRS&#xff08;Core Rule Set&#xff09;規則和 DRS&#xff08;Default Rule Set&#xff09;規則。以…

Docker安裝Mysql數據庫

1. 前言 XXXXX 2. Docker中安裝MySQL服務 以下以mysql8.2版本為例&#xff0c;mysql5.7的步驟也是一樣的 2.1. 查看可用的MySQL版本 # 搜索鏡像 docker search mysql2.2. 拉取MySQL鏡像 # 拉取鏡像 docker pull mysql# 或者 docker pull mysql:latest2.3. 查看本地鏡像 …

淺談linux緩沖區的認識!

今天來為大家分享一波關于緩沖區的知識&#xff01;那么既然我們要談緩沖區&#xff0c;那么就得從是什么&#xff1f;為什么&#xff1f;有什么作用這幾個方面來談論一下緩沖區&#xff01;然后再通過一些代碼來更加深刻的理解緩沖區的知識&#xff01; 引言&#xff1a; 是…

【C++ Primer Plus學習記錄】邏輯表達式

一、邏輯OR運算符&#xff1a;|| 如果表達式中的任何一個或全部都為true&#xff08;或非零&#xff09;&#xff0c;則得到的表達式的值為true&#xff1b;否則&#xff0c;表達式的值為false。 ||的優先級比關系運算符低。 C規定&#xff0c;||運算符是個順序點。即&#…

Navicat 技術指引 | 適用于 GaussDB 分布式的日志查詢與配置設置

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…

文獻計量學方法與應用、主題確定、檢索與數據采集、VOSviewer可視化繪圖、Citespace可視化繪圖、R語言文獻計量學繪圖分析

目錄 一、文獻計量學方法與應用簡介 二、主題確定、檢索與數據采集 三、VOSviewer可視化繪圖 四、Citespace可視化繪圖 五、R語言文獻計量學繪圖分析 六、論文寫作 七、論文投稿 更多應用 文獻計量學是指用數學和統計學的方法&#xff0c;定量地分析一切知識載體的交叉…

AWS攻略——使用中轉網關(Transit Gateway)連接不同區域(Region)VPC

文章目錄 Peering方案Transit Gateway方案環境準備創建Transit Gateway Peering Connection接受邀請修改中轉網關路由修改被邀請方中轉網關路由修改邀請方中轉網關路由 測試修改Public子網路由 知識點參考資料 區別于 《AWS攻略——使用中轉網關(Transit Gateway)連接同區域(R…