概述
例如场景之一:在AOP中实现接口操作记录,并记录请求的参数,接口相应结果,耗时,异常,结果等。用户行为日志记录还是挺重要的,毕竟要留着以后做行为分析和查找系统异常,为了加快响应,日志记录不需要实时,因此使用异步方式启动一个线程去做这种事情,但是并发量高的时候,线程太占用系统资源了,做得更好的方式应该是放到线程池或队列里面去执行这种操作。这里只是单纯的介绍@Async在springboot里面的使用方式。
在启动类上加@EnableAsync注解
@SpringBootApplication
@EnableSwagger2
@MapperScan("com.operate.mapper")
@EnableCaching
@EnableAsync
public class OperateServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OperateServiceApplication.class, args);
}
}
在需要执行异步的方法上加@Async注解,不过有几点需注意
1.不要在本类中异步调用。即一个方法是异步方法,然后用另一个方法调用这个异步方法。
2.不要有返回值,使用void
3.不能使用本类的私有方法或者非接口化加注@Async,因为代理不到失效
4.异步方法不能使用static修饰
5.异步类需使用@Component注解,不然将导致spring无法扫描到异步类
6.SpringBoot框架必须在启动类中增加@EnableAsync注解
7.异步方法不要和事物注解同时存在。可以在事物的方法中调用另外一个类中的异步方法。在调用Async方法的方法上标注@Transactional是管理调用方法的事务的,在Async方法上标注@Transactional是管理异步方法的事务,事务因线程隔离
/**
* 功能描述: <br>
* 〈〉添加日志记录
* @param ret
* @return:
* @Author: YuGuiMing
* @Date: 2021/2/3/003 11:37
*/
@Async
public void insUserOperateRecord(Object ret){
ResultData result = (ResultData) ret;
UserOperateRecord record = local.get();
Long excuteTime = System.currentTimeMillis() - record.getStartTime();
record.setExcuteTime(excuteTime);
record.setResult(ret.toString());
record.setCode(Integer.toString(result.getCode()));
userOperateRecordService.insUserOperateLog(record);
}
参考文章:https://www.jb51.cc/java/534824.html
最后
以上就是清新水池为你收集整理的SpringBoot使用@Async实现异步行为操作日志记录的全部内容,希望文章能够帮你解决SpringBoot使用@Async实现异步行为操作日志记录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复