一、事务的概念
可以用4个关键属性来描述事务的概念,即原子性,一致性,隔离性,以及持久性。
原子性:事务是一种原子操作,由一系列动作组成。事务的原子性确保了动作要么全部完成,要么完全不起作用。
一致性:一旦所有的事务动作完成,事务就被提交。数据和资源就处于一种满足业务规则的一致状态中。
隔离性:可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,以防止数据损坏。
持久性:一旦事务完成,无论发生什么系统错误,它的结果都应该不受影响。
二、使用JDBC提交和回滚管理事务
在使用JDBC更新数据库时,默认是每个SQL语句在执行之后都立即提交。这种行为称为自动提交。
JDBC支持一种基本的事务管理策略,即在连接上显示地调用commit()和rollback()方法。但是,在这么做之前,必须关闭自动提交行为,它默认是打开的。con.setAutoCommit(false)。
三、选择事务管理器实现
spring从不同的事务管理API中抽象了一整套的事务机制。
spring的核心事务管理抽象是PlatformTransactionManager。它为事务管理封装了一组独立于技术的方法。
无论你选择了spring的哪种事务管理策略(编程式或者声明式),事务管理器基本上都是必须的。
PlatformTransactionManager是所有spring事务管理器的通用接口。spring内置了几个实现,用于不同的事务管理API。
如果你在应用程序中只需处理一个数据源,并且通过JDBC进行存取,DataSourceTransactionManager应该能满足你的需求。
如果是在Java EE应用服务器上使用JTA进行事务管理,就应该使用JtaTransactionManager从应用服务器查找事务。
如果是用对象/关系映射框架存取数据库,就应该为这个框架选择相应的事务管理器,例如HibernateTransactionManager和JpaTransactionManager。