我们都知道,SpringBoot数据库事务是基于切面实现的,我们经常在自定义切面实现一些数据库操作,这些操作受不受Spring事务管理勒,怎么控制我们自己切面和事务切面的优先级关系,我做了些测试。
前提:事务和切面的实现都采取注解实现,这也是我们当前最常用的。
就不贴测试过程了,有点弱。测试结论如下:
- @Order用于定义切面类优先级,order的value为Int,其值越低,越先执行,越后出来。
- @Order默认值为2147483647,不加@Order的切面其值可以理解为也为2147483647(int类型最大值)。
- 事务切面的优先级可以理解为就是2147483647,但是事务的优先级在order为2147483647中优先级最高的。
结论:要想自定义切面在事务里运行,不加@Order就好了,如果想在外面执行,加上order注解并随意指定一个值只要小于2147483647就好了。