本文主要是介绍SpringBoot--@Transactional 和 @Cacheable的执行顺序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文网址:SpringBoot--@Transactional 和 @Cacheable的执行顺序_IT利刃出鞘的博客-CSDN博客
简介
本文介绍@Transactional 和 @Cacheable标注在同一个方法上时的执行顺序。
简述
如果一个方法上同时存在 @Transactional 和 @Cacheable ,且没有指定事务切面和缓存切面的 Order,那么先执行 @Cacheable 对应的切面,再执行 @Transactional 对应的切面。
详解
Spring里如果一个方法存在多个切面,是按照切面的 Order 顺序来执行的:Order 值越小,那么切面越先执行(越后结束)。
@Transactional 和 @Cacheable 都是通过 AOP 来实现的,@Transactional 和 @Cacheable分别对应了一个切面。
- 如果不指定事务切面和缓存切面的 Order,它们的 Order 都将是默认值(Integer.MAX_VALUE),即最小优先级。
- 如果两个切面 Order 相同,按照切面的字母顺序来执行。
所以:如果一个方法上同时存在 @Transactional(对应切面为 TransactionInterceptor)和 @Cacheable (对应切面为 CacheInterceptor),且没有指定事务切面和缓存切面的 Order。那么因为 CacheInterceptor 的字母顺序在 TransactionInterceptor 之前,所以先执行 @Cacheable 对应的切面,再执行 @Transactional 对应的切面。
那么如何指定缓存切面或者事务切面的 Order ?
上边是文章的部分内容,为统一维护,全文已转移到此网址:SpringBoot-@Transactional 和 @Cacheable的执行顺序 - 自学精灵
这篇关于SpringBoot--@Transactional 和 @Cacheable的执行顺序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!