青白江区城乡和建设局网站,交易系统开发,设计本电脑,企业微信网页版Spring事务的本质其实就是数据库对事务的支持#xff0c;没有数据库的事务支持#xff0c;spring是无法提供事务功能的。 Spring只提供统一事务管理接口#xff0c;具体实现都是由各数据库自己实现#xff0c;数据库事务的提交和回滚是通过 redo log 和 undo log实现的。 S…Spring事务的本质其实就是数据库对事务的支持没有数据库的事务支持spring是无法提供事务功能的。 Spring只提供统一事务管理接口具体实现都是由各数据库自己实现数据库事务的提交和回滚是通过 redo log 和 undo log实现的。 Spring会在事务开始时根据当前环境中设置的隔离级别调整数据库隔离级别由此保持一致 1.Spring事务的种类
spring支持编程式事务管理和声明式事务管理两种方式
1编程式事务管理使用TransactionTemplate 2声明式事务管理建立在AOP之上的。 其本质是通过AOP功能对方法前后进行拦截将事务处理的功能编织到拦截的方法中也就是在目标方法开始之前启动一个事务在执行完目标方法之后根据执行情况提交或者回滚事务 声明式事务最大的优点就是不需要在业务逻辑代码中掺杂事务管理的代码只需在配置文件中做相关的事务规则声明或通过Transactional注解的方式便可以将事务规则应用到业务逻辑中减少业务代码的污染。 唯一不足地方是最细粒度只能作用到方法级别无法做到像编程式事务那样可以作用到代码块级别 2.spring的事务传播机制
spring事务的传播机制说的是当多个事务同时存在的时候spring如何处理这些事务的行为。
事务传播机制实际上是使用简单的ThreadLocal实现的所以如果调用的方法是在新线程调用的事务传播实际上是会失效的。 1.propagation_required默认传播行为如果当前没有事务就创建一个新事务如果当前存在事务就加入该事务。 2. propagation_requires_new无论当前存不存在事务都创建新事务进行执行。 3.propagation_supports如果当前存在事务就加入该事务如果当前不存在事务就以非事务执行。 4.propagation_not_supported以非事务方式执行操作如果当前存在事务就把当前事务挂起。 5. propagation_nested如果当前存在事务则在嵌套事务内执行如果当前没有事务则按REQUIRED属性执行。 6. propagation_mandatory强制性的如果当前存在事务就加入该事务如果当前不存在事务就抛出异常。 7.propagation_never以非事务方式执行如果当前存在事务则抛出异常。 3.Spring中的隔离级别 1.isolation_dafault这是个 PlatfromTransactionManager 默认的隔离级别使用数据库默认的事务隔离级别。 2.isolation_read_uncommitted读未提交允许事务在执行过程中读取其他事务未提交的数据。 3. isolation_read_committed读已提交允许事务在执行过程中读取其他事务已经提交的数据。 4. isolation_repeatable_readisolation可重复读在同一个事务内任意时刻的查询结果都是一致的。 5. isolation_serializable所有事务逐个依次执行。