所需要的依赖
org.springframework.boot
spring-boot-starter-aop
定义切面
@Aspect
public class MedalPointCuts {
@Pointcut(value = "execution(* cn.bigabc.base.quick.service.StudentDayTimeService.add(String,Long,*,Integer))&& args(studentNo,operatorId,..)")
public void addDayTime(String studentNo, Long operatorId) {
}
@Pointcut(value = "execution(* cn.bigabc.base.quick.service.mybatis.MybatisAppServiceImpl.saveDsr(Long,String,*,*)) && args(operatorId,studentNo,source,dsr)")
public void saveBookDsr(Long operatorId, String studentNo, DsrSource source, List<BookDsr> dsr) {
}
@Pointcut(value = “execution(* cn.bigabc.base.quick.service.BookEvaluateAnswerService.submitAnswer(*)) && args(answer)”)
public void bookSubmitAnswer(BookEvaluateAnswer answer) {
}
args内是方法的字段名 一些枚举,对象 直接用*就可以了
如上 如果切面不需要那么多参数,…表示就可以入第一个方法
具体实现
@Async(“asyncServiceExecutor”) //表示异步,不影响主逻辑,我这是创建一个线程池下面有具体方法
@Order(10) //表示是否影响主事务,大于等于10表示不影响,就是这里报错,主也会插入成功
@Aspect
@Component
public class MedalAop {
@AfterReturning(value = “cn.bigabc.base.quick.aop.medal.MedalPointCuts.addDayTime(studentNo,operatorId)”)
public void makeCoins(String studentNo, Long operatorId) {
具体的实现逻辑
//需要注意的是这里面如果有插入修改删除操作,需要写一个service
这里面调用那个service,因为这里面不支持事务
}
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
-
创建的线程池
*/
@Slf4j
@Configuration
public class ThreadPoolTaskExecutorConfig implements AsyncConfigurer {@Bean
public ThreadPoolTaskExecutor asyncServiceExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(4);
threadPoolTaskExecutor.setMaxPoolSize(8);
// threadPoolTaskExecutor.setQueueCapacity(9999);
threadPoolTaskExecutor.setThreadNamePrefix(“ThreadPool-”);
threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
threadPoolTaskExecutor.setKeepAliveSeconds(60);
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
//错误显示出来
return (throwable, method, objects) -> log.error(“Exception occurs in async method{}”, throwable);
}