spring的事务管理笔记
- - 企业架构 - ITeye博客首先,事务管理是保证数据操作的事务性 ACID(即原子性、一致性、隔离性、持久性). 对于使用支持事务管理的数据库时,普通的jdbc的连接没用配置事务也可以保存变更,原因在于连接的属性autocommit设置了true,即自动提交了事务. 而对于某些数据库本身没有对事务的支持,那么事务管理也是一纸空谈没有必要进行配置(有例外),如MySQL的MyISAM没有事务管理的支持.
Spring事务的介绍
首先,事务管理是保证数据操作的事务性 ACID(即原子性、一致性、隔离性、持久性)。
对于使用支持事务管理的数据库时,普通的jdbc的连接没用配置事务也可以保存变更,原因在于连接的属性autocommit设置了true,即自动提交了事务。
而对于某些数据库本身没有对事务的支持,那么事务管理也是一纸空谈没有必要进行配置(有例外),如MySQL的MyISAM没有事务管理的支持。但是如果使用了有自身事务管理的框架如Hibernate的话可以变向地实现事务管理(由于Hibernate的一级缓存,我们在操作update和save等时,它不会向数据库提交数据,而是等我们调用commit或者flush一级缓存的数据时才会提交更改)。
所谓的事务的传播或者说嵌套通俗地说就是,事务方法的互相调用。spring提供了七中传播行为:
Hibernate | Spring JDBC 或 iBatis | HibernateTransactionManager |
JPA | Spring JDBC 或 iBatis | JpaTransactionManager |
JDO | Spring JDBC 或 iBatis | JdoTransactionManage |
即使用jpa又使用jdbc(JPA+JDBC)称为混合事务,在Spring AOP的事务增强的情况下,混合事务仍然会保持事务的一致,即混合技术但唯一事务。
但是在使用Hibernate时由于一级缓存的存在必须flush()一级缓存,因为其他框架是感知不到他的一级缓存。
Spring的事务增强是在aop的基础上的,所以aop覆盖不到的方法即不能有Spring的事务管理。