202012-29 SpringBoot用@Async注解实现异步任务 什么是异步调用?异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。如何实现异步调用?多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式。在非spring目项目中我们要实现异步调用的就是使用多线程方式,可以自己实现Runable接口或者集成Thread类,或者使用jdk1.5以上提供了的Executors线... 继续阅读 >
202010-10 解决SpringBoot中使用@Async注解失效的问题 错误示例,同一个类中使用异步方法:packagecom.xqnode.learning.controller;importcom.fasterxml.jackson.core.JsonProcessingException;importorg.springframework.scheduling.annotation.Async;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.util.HashMap;import... 继续阅读 >
202010-01 springboot中@Async默认线程池导致OOM问题 前言:1.最近项目上在测试人员压测过程中发现了OOM问题,项目使用springboot搭建项目工程,通过查看日志中包含信息:unabletocreatenewnativethread内存溢出的三种类型:1.第一种OutOfMemoryError:PermGenspace,发生这种问题的原意是程序中使用了大量的jar或class2.第二种OutOfMemoryError:Javaheapspace,发生这种问题的原因是java虚拟机创建的对象太多3.第三种OutOfMemoryError:unabletocreatenewnativethrea... 继续阅读 >
202009-28 带有@Transactional和@Async的循环依赖问题的解决 今天我们来探讨一个有意思的spring源码问题,也是一个学生告诉了我现象我从源码里面找到了这个有意思的问题。首先我们看service层的代码案例,如下:@Service("transationServiceImpl")publicclassTransationServiceImplimplementsTransationService{@AutowiredTransationServicetransationService;@Transactional@Async@Overridepublicvoidtransation(){}}在transation方法上面加上了@Transactional和@Asy... 继续阅读 >
202009-27 Spring中@Async注解实现异步调详解 异步调用在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕,继续执行下面的流程。例如,在某个调用中,需要顺序调用A,B,C三个过程方法;如他们都是同步调用,则需要将他们都顺序执行完毕之后,过程才执行完毕;如B为一个异步的调用方法,则在执行完A之后,调用B,并不等待B完成,... 继续阅读 >
202009-27 SpringBoot项目@Async方法问题解决方案 现象:1.表面现象:方法中输出的日志,日志文件中找不到,也没有任何报错(即@Async标注的方法没有执行,也没有报错)2.分析现象:日志中某个时刻之后没有了task-xxx线程的日志原因:@Async异常方法默认使用Spring创建ThreadPoolTaskExecutor(参考TaskExecutionAutoConfiguration),其中默认核心线程数为8,默认最大队列和默认最大线程数都是Integer.MAX_VALUE.创建新线程的条件是队列填满时,而这样的配置队列永远不会填满,如果... 继续阅读 >