pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
1、annotation 包下
package com.app.annotation;
import java.lang.annotation.*;
/**
* 自定义异步注解,service.impl层打此注解
*
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AsyncAnnotation {
}
2、aop包下
package com.app.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import java.util.concurrent.ExecutorService;
import static java.util.concurrent.Executors.*;
/**
* 使用aop进行异步注解
*
*/
@Aspect
@Component
@Slf4j
public class AsyncAspect {
private ExecutorService executorService;
public AsyncAspect() {
executorService = newFixedThreadPool(15);
}
@Around(value = "@annotation(com.app.annotation.AsyncAnnotation)")
public void doBefore(ProceedingJoinPoint joinPoint) throws Throwable {
// 直接获取到方法上有加上AsyncAnnotation
executorService.execute(new Runnable() {
@Override
public void run() {
// 执行我们的目标方法
try {
joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
});
}
}
service层中的方法打注解 @AsyncAnnotation即可