我是靠谱客的博主 清新水池,最近开发中收集的这篇文章主要介绍SpringBoot使用@Async实现异步行为操作日志记录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

例如场景之一:在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实现异步行为操作日志记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部