Spring Boot使用AOP在指定方法执行完后执行异步处理操作

 更新时间:2024年06月22日 10:53:07   作者:langzitianya  
这篇文章主要介绍了Spring Boot使用AOP在指定方法执行完后执行异步处理操作,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

1.在pom.xml中加入如下依赖

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

2.在Spring Boot的application启动类上加上

      @EnableAsync(proxyTargetClass = true)
       proxyTargetClass为可选配置相,默认为false

3.创建异步执行类MyAsyncTask

@Component
public class MyAsyncTask {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Async
    public void refreshMyDbAsync(String url, String id) {
    	for(int i=0; i < 10; i++){
    	    logger.info("2.In Async Method id:" + id + " count:" + i + " URL:" + url);
    	    try {
		    Thread.sleep(5000);
	    } catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	    }
    	}
    }
}

4.创建Aspect类,定义切入点并在切入点执行后调用异类执行类的异步方法

@Aspect
@Component
public class MyAspect {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
    private MyAsyncTask myAsyncTask;
    @Pointcut("execution(* com.lantian.controller.Controller1.detail(..)) || "
            + "execution(* com.lantian.controller.Controller1.list(..)) || "
            + "execution(* com.lantian.controller.Controller2.detail(..))")
    public void modifyMethod() {}
    @AfterReturning(returning = "ret", pointcut = "modifyMethod()")
    public void afterModify(Object ret) {
    	//获取request
    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    	String url = request.getRequestURL().toString();
    	String id = request.getParameter("id");
    	logger.info("1.Before Async Method URL:"+url);
    	logger.info(ret+"");
    	myAsyncTask.refreshMyDbAsync(url, id);
    	logger.info("3.After Async Method URL:"+url);
    }
}

5.注意事项:

   异步方法不能直接写在Aspect类里,否则不会异步执行。
      spring对@Transactional注解时也有类似问题,spring扫描时具有@Transactional注解方法的类时,是生成一个代理类,由代理类去开启关闭事务,而在同一个类中,方法调用是在类体内执行的,spring无法截获这个方法调用。

到此这篇关于Spring Boot使用AOP在指定方法执行完后执行异步处理的文章就介绍到这了,更多相关Spring Boot AOP执行异步处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ThreadLocal使用案例_动力节点Java学院整理

    ThreadLocal使用案例_动力节点Java学院整理

    这篇文章主要介绍了ThreadLocal使用案例分析,需要的朋友可以参考下
    2017-08-08
  • 解读@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstructor的区别及在springboot常用地方

    解读@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstr

    这篇文章主要介绍了解读@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstructor的区别及在springboot常用地方,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Spring注解驱动之@EventListener注解使用方式

    Spring注解驱动之@EventListener注解使用方式

    这篇文章主要介绍了Spring注解驱动之@EventListener注解使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Java 垃圾回收机制详解(动力节点Java学院整理)

    Java 垃圾回收机制详解(动力节点Java学院整理)

    在系统运行过程中,会产生一些无用的对象,这些对象占据着一定的内存,如果不对这些对象清理回收无用对象的内存,可能会导致内存的耗尽,所以垃圾回收机制回收的是内存。下面通过本文给大家详细介绍java垃圾回收机制,一起学习吧
    2017-02-02
  • 详解Java中的do...while循环语句的使用方法

    详解Java中的do...while循环语句的使用方法

    这篇文章主要介绍了Java中的do...while循环语句的使用方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 浅谈java如何生成分享海报工具类

    浅谈java如何生成分享海报工具类

    这篇文章主要介绍了浅谈java如何生成分享海报工具类,想了解分享海报知识的同学不要错过哦
    2021-04-04
  • SpringBoot集成Validation参数校验

    SpringBoot集成Validation参数校验

    这篇文章主要为大家详细介绍了SpringBoot集成Validation参数校验,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java中Minio的基本使用详解

    Java中Minio的基本使用详解

    这篇文章主要介绍了Java中Minio的基本使用详解,MinIO 是一个基于Apache License v2.0开源协议的对象存储服务,它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,需要的朋友可以参考下
    2024-01-01
  • 微信随机生成红包金额算法java版

    微信随机生成红包金额算法java版

    这篇文章主要为大家详细介绍了java和php版的微信随机生成红包金额算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Java如何执行cmd命令

    Java如何执行cmd命令

    这篇文章主要介绍了Java如何执行cmd命令问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

最新评论