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

Springboot api http并发测试请求

pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

 线程发起请求

package com.example.demo;import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;import java.util.concurrent.Callable;public class ConcurrentRequestTask implements Callable<String> {private final String url;public ConcurrentRequestTask(String url) {this.url = url;}@Overridepublic String call() throws Exception {// 创建RestTemplate实例RestTemplate restTemplate = new RestTemplate();// 设置请求HeaderHttpHeaders headers = new HttpHeaders();headers.set("Authorization", "Bearer token123");headers.set("Content-Type","application/json");// 设置请求参数MultiValueMap<String, String> map = new LinkedMultiValueMap<>();map.add("key1", "value1");map.add("key2", "value2");// 创建请求实体HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(map, headers);ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);String result = responseEntity.getBody();return result;}
}

 Test

package com.example.demo;import org.springframework.web.client.RestTemplate;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;public class ConcurrentRequestTest {public static void main(String[] args) throws Exception {String url = "http://localhost:8080/api";ExecutorService executorService = Executors.newFixedThreadPool(10);int taskCount = 10;Future<String>[] futures = new Future[taskCount];for (int i = 0; i < taskCount; i++) {futures[i] = executorService.submit(new ConcurrentRequestTask(url));}for (Future<String> future : futures) {System.out.println(future.get());}executorService.shutdown();}
}

API

package com.example.demo.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.Map;@RestController
public class ApiController {@Autowiredprivate RestTemplate restTemplate;@PostMapping("/api")public String apiEndpoint(@RequestBody Map<String,Object> map) {System.out.println("param:"+map.toString());// 这里可以添加业务逻辑return "Response";}
}

http://www.lryc.cn/news/462047.html

相关文章:

  • Qt的websocket客户端和服务器测试(非安全版本)
  • Prometheus运维监控平台之监控指标注册到consul脚本开发、自定义监控项采集配置调试(三)
  • C语言——数组
  • MySQL-09.DDL-表结构操作-查询修改删除
  • WileyNJDv5_Template模板无法编译生成pdf文件
  • 亿配芯城(ICGOODFIND)教你外贸(海外)推广电子元器件芯片的专用词语
  • windows和linux的一些使用问题一一记录
  • 排序算法上——插入,希尔,选择,堆排序
  • Mycat 详细介绍及入门实战,解决数据库性能问题
  • FFmpeg源码:avformat_new_stream函数分析
  • 【java】深入解析Lambda表达式
  • Chromium html<img>对应c++接口定义
  • 卸载Python
  • 算法剖析:二分查找
  • Invoke 和 InvokeRequired以及他们两个的区别
  • SpringBoot概览及核心原理
  • 根据basic auth请求https获取token
  • 【基础版】React缓存路由
  • Java基础15-Java高级
  • selenium工具的几种截屏方法介绍(9)
  • 【设计模式】深入理解Python中的过滤器模式(Filter Pattern)
  • vue的动态组件 keep-alive
  • 现代框架开发官网
  • 一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理
  • AtCoder Beginner Contest 375(A,B,C,D,E,F)(大模拟,前缀和,dp,离线处理,Floyd)
  • 认识maven
  • OSINT技术情报精选·2024年10月第2周
  • 中企通信赋能中信戴卡入选工信部颁发的2023年工业互联网试点示范名单
  • 【C语言】函数的声明与定义
  • 游戏如何应对薅羊毛问题