本文主要是介绍spring事务--一点小计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 使用事务管理器时,什么条件下开始事务?事务是什么时候开始?以及什么时候提交事务?
某个方法required,而当时没有启动事务,这时候创建一个新事务。
某个方法require new。马上就会创建一个新事务(嵌套?)。
当创建事务的方法正常退出后,会提交对应的事务
引用
2. 若某方法定了事务,但开始时候执行了一大堆不包含任何数据库操作的处理,此时会开始时候吗?
会
引用
3. 方法定义为:PROPAGATION_NOT_SUPPORTED或者PROPAGATION_SUPPORTS似乎都是一样的,即不要求一定在事务中执行,在当前存在事务的时候就按事务方式执行,否则以非事务方式执行。
不一样
PROPAGATION_NOT_SUPPORTED
Execute non-transactionally, suspending the current transaction if one exists.
PROPAGATION_SUPPORTS
Support a current transaction, execute non-transactionally if none exists.
也就是说当not supported时,如果在事务环境中运行会暂停当前事务。如果此时该方法抛出异常事务不会回滚。
当support时上述情况相反,会回滚事务。
当方法正常退出或者不存在事务时两者行为一致。
引用
4. PROPAGATION_REQUIRED以及PROPAGATION_REQUIRES_NEW说的似乎也是一样,即要求事务中执行,若不存在事务,则新建事务,否则在已有事务中执行。
不一样。如果在已有事务下运行,则required不会新建事务;而requires_new铁定会再新建一个,暂停原先事务。
也就是说,如果某个方法只是REQUIRED,那么抛出异常后,会回滚原先的操作。如果某个方法requries_new,而又抛出异常,只会回滚这个方法中的操作,不涉及原先操作。
(猜测:如果jdbc驱动支持嵌套事务,那么requries_new可能是用嵌套事务来作的。)
如果不存在现有事务则两者行为一致
这篇关于spring事务--一点小计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!