spring5 webflux测试
Posted zfzf1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring5 webflux测试相关的知识,希望对你有一定的参考价值。
ServerResponse方式
@Configuration public class RouterFunctionConfiguration { @Bean // @Autowired public RouterFunction<ServerResponse> personFindAll(UserRepository userRepository){ return RouterFunctions.route(RequestPredicates.GET("/person/find/all"), request ->{ Collection<User> users = userRepository.findAll(); Flux<User> userFlux = Flux.fromIterable(users); return ServerResponse.ok().body(userFlux,User.class); }); } }
测试
@Test
public void threadTestOrderBy() throws InterruptedException {
final Long id=141284830240768L;
int threadCount=100000;
final CountDownLatch begin = new CountDownLatch(1);
final CountDownLatch end = new CountDownLatch(threadCount);
final int[] result={0,0};
final Object lock = new Object();
ExecutorService executorService = Executors.newFixedThreadPool(100);
Long time1=System.currentTimeMillis();
for (int i = 0; i < threadCount; i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
begin.await();
HttpParamsVo httpParamsVo = new HttpParamsVo(new HttpSecretVo(appKey,appSecret),params);
String resultS = HttpClientSecretSendUtil.get(url, httpParamsVo);
synchronized(lock){
result[0]++;
}
} catch (Exception ex) {
synchronized(lock) {
result[1]++;
}
ex.printStackTrace();
}finally{
end.countDown();
}
}
});
executorService.submit(thread);
}
System.out.println(threadCount+"个线程开始");
begin.countDown();
end.await();
Long time2=System.currentTimeMillis();
System.out.println("耗时: "+(time2-time1)/1000+"秒");
System.out.println(threadCount+"个线程更新结束");
System.out.println("成功"+result[0]+",失败"+result[1]);
}
耗时
servlet方式
@GetMapping("/person/find/all") @ResponseBody public Collection<User> findAll(){ return this.userRepository.findAll(); }
测试同上
结果
总结100W个线程的情况下
spring 5提供的 webFlux 相比 servlet模型 慢了17秒
以上是关于spring5 webflux测试的主要内容,如果未能解决你的问题,请参考以下文章
spring5 webflux,如何返回自定义json数据?
Spring 5 之 WebFlux 开发反应式 Web 应用
技术使用 Spring 5 的 WebFlux 开发反应式 Web 应用