感谢网上大神,事件不多说,概念可以百度,直接上代码
我做的一个日志记录,将接口记录保存到mysql,网上有很多用的是aop ,我用的是网关
public class UsualLogEvent extends ApplicationEvent { private LogUsual log; public UsualLogEvent(LogUsual log) { super(log); this.log=log; } public LogUsual getLog() { return log; } }
@Component public class UsualLogListener implements ApplicationListener<UsualLogEvent> { @Autowired private ILogUsualService logUsualService; @Order @Override @Async public void onApplicationEvent(UsualLogEvent usualLogEvent) { LogUsual log = usualLogEvent.getLog(); logUsualService.save(log); } }
网关记录
//将请求记录插入数据库 if (response.getRawStatusCode()==200){ if (path.equals("/auth/oauth/logout")){ //退出登录 applicationEventPublisher.publishEvent(new UsualLogEvent(getLogData(request,ktfwProperties,serverInfo,"0"))); }else if (path.equals("/kauth/oauth/token")){ }else{ applicationEventPublisher.publishEvent(new UsualLogEvent(getLogData(request,ktfwProperties,serverInfo,"1"))); } // }
@Configuration @EnableAsync public class AsyncConfig implements AsyncConfigurer { private final Logger log = LoggerFactory.getLogger(this.getClass()); /** * 自定义异步线程池,若不重写会使用默认的线程池 */ @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); // 核心线程数 taskExecutor.setCorePoolSize(10); // 最大线程数 taskExecutor.setMaxPoolSize(20); // 缓冲队列数 taskExecutor.setQueueCapacity(200); // 允许线程空闲时间(单位:默认为秒) taskExecutor.setKeepAliveSeconds(60); // 线程池名前缀 taskExecutor.setThreadNamePrefix("asyncExecutor-"); // 设置是否等待计划任务在关闭时完成 taskExecutor.setWaitForTasksToCompleteOnShutdown(true); // 设置此执行器应该阻止的最大秒数 taskExecutor.setAwaitTerminationSeconds(60); // // 增加 TaskDecorator 属性的配置 // taskExecutor.setTaskDecorator(new ContextDecorator()); // 线程池对拒绝任务的处理策略 taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 初始化 taskExecutor.initialize(); return taskExecutor; } /** * 捕捉IllegalArgumentException异常 */ @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new MyAsyncExceptionHandler(); } class MyAsyncExceptionHandler implements AsyncUncaughtExceptionHandler { @Override public void handleUncaughtException(Throwable throwable, Method method, Object... objects) { log.info("TASK Exception message - " + throwable.getMessage()); log.info("Method name - " + method.getName()); for (Object param : objects) { log.info("Parameter value - " + param); } } } }