首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊聊TransactionSynchronization的invokeAfterCompletion

序 本文主要研究一下TransactionSynchronization的invokeAfterCompletion afterCompletion org/springframework/transaction...(int status) { } } afterCompletion方法有入参status,表示事务结束时候的状态,0表示事务已提交,1表示事务已回滚,2表示事务未知;与afterCommit的一个最重要的区别是...afterCompletion的异常会被捕获,不像afterCommit会抛给调用方 invokeAfterCompletion org/springframework/transaction/support.../TransactionSynchronizationUtils.java /** * Actually invoke the {@code afterCompletion} methods of...方法有入参status,表示事务结束时候的状态,0表示事务已提交,1表示事务已回滚,2表示事务未知(一般是JTA相关);与afterCommit的一个最重要的区别是afterCompletion的异常(

19710
您找到你想要的搜索结果了吗?
是的
没有找到

聊聊TransactionSynchronization的invokeAfterCompletion

(int status) {}}afterCompletion方法有入参status,表示事务结束时候的状态,0表示事务已提交,1表示事务已回滚,2表示事务未知;与afterCommit的一个最重要的区别是...afterCompletion的异常会被捕获,不像afterCommit会抛给调用方invokeAfterCompletionorg/springframework/transaction/support.../TransactionSynchronizationUtils.java/** * Actually invoke the {@code afterCompletion} methods of the...(completionStatus);}catch (Throwable tsex) {logger.error("TransactionSynchronization.afterCompletion...方法有入参status,表示事务结束时候的状态,0表示事务已提交,1表示事务已回滚,2表示事务未知(一般是JTA相关);与afterCommit的一个最重要的区别是afterCompletion的异常(

11020

拦截器

:处理完视图和模型数据,渲染视图完毕之后执行afterCompletion() # 多个拦截器的执行顺序 若每个拦截器的preHandle()都返回true 此时多个拦截器的执行顺序和拦截器在SpringMVC...的配置文件的配置顺序有关: preHandle()会按照配置的顺序执行,而postHandle()和afterCompletion()会按照配置的反序执行 若某个拦截器的preHandle()返回了false...preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterCompletion()会执行 Click...FirstInterceptor--afterCompletion 若FirstInterceptor-preHandle返回True,SecondInterceptor--preHandle返回False...,结果为 FirstInterceptor--preHandle SecondInterceptor--preHandle FirstInterceptor--afterCompletion # 自定义拦截器

76020

SpringBoot中的HandlerInterceptorAdapter

afterCompletion:在整个请求处理完毕后进行回调,也就是说视图渲染完毕或者调用方已经拿到响应。...关于 afterConcurrentHandlingStarted 官方文档是这样写的:当处理程序同时执行时,调用而不是postHandle和afterCompletion。...然后执行主方法(自己的controller接口),若中间抛出异常,则跟return false效果一致,不会继续执行postHandle,只会倒序执行afterCompletion方法。...若第三个拦截器的preHandle方法return false,则会执行第二个和第一个的postHandle方法和afterCompletion(postHandle都执行完才会执行这个,也就是页面渲染完数据后...(postHandle和afterCompletion都是倒序执行) HandlerInterceptorAdapter 用来做拦截器还是很方便的,可以用来实现如下应用场景: 日志记录,可以记录请求信息的日志

60950

SpringFramework之HandlerInterceptor

3位置,调用HandlerExecutionChain的applyPreHandle,如下,逐个调用preHandle方法,只要preHandle返还false,就会你像调用afterCompletion...,由List-5可以看出,afterCompletion中抛出异常,会被Spring框架吞噬,每个HandlerInterceptor的afterCompletion方法中,拿到的异常都是null——看..., response, this.handler, ex); } catch (Throwable ex2) { logger.error("HandlerInterceptor.afterCompletion...图1      如图1所示, 如果执行preHandle的链中抛出异常,那么逆向执行afterCompletion,不会执行postHandle;如果postHandle抛出异常,则逆向执行afterCompletion...如果没有抛出异常,正常情况下,先执行完preHandle链,之后调用controller的方法,之后调用逆向postHandle链,之后逆向执行afterCompletion链,如图1中右边的竖行方向调用所示

73730

Spring 拦截器流程及多个拦截器的顺序

response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } default void afterCompletion...在 HandlerInterceptor 中共有三个方法,每个方法的含义如下: preHandler:进入请求方法之前执行; postHandler:请求方法执行完成之后执行; afterCompletion...拦截器的执行流程 在 preHandle 方法中,它的返回值是 boolean 类型的,它的返回值影响着请求方法,以及 postHandle 和 afterCompletion 的执行...2021-05-05 16:02:08.111 INFO 88509 --- [nio-8081-exec-6] com.example.demo.TestInterceptor : afterCompletion...注意观察输出的顺序,preHandle 方法是按注册顺序进行执行的,而 postHandle 和 afterCompletion 跟注册顺序是相反的。

1.5K40

SpringMvc—拦截器「建议收藏」

----视图渲染完毕执行"); } } 拦截器处理请求后结果 可以发现,preHandle执行顺序是跟在配置文件的先后注册顺序执行的,postHandle和AfterCompletion是反过来执行的...----视图渲染完毕执行 FirstInterceptor---afterCompletion----视图渲染完毕执行 在源码中 首先为控制器方法打上断点。...在for循环中的if判断,就是判断返回值是不是false,如果是就会执行当前的afterCompletion方法【就是最后执行的那个方法】,并且返回false终结掉DispatcherServlet中的程序执行...afterCompletion方法的执行也和这个postHandel一样–for循环 多个拦截器(preHandel返回false) 依旧是断点模式,但是是将preHandel返回值变成false。...所以在有多个interceptor被注册后,其中有一个interceptor的preHandel方法的返回值为false,那么在这个拦截器之前注册的拦截器的preHandel方法和afterCompletion

48910
领券