这篇文章主要介绍“Spring对事务的管理和支持”,在日常操作中,相信很多人在Spring对事务的管理和支持问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring对事务的管理和支持”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联是一家集网站建设,虎丘企业网站建设,虎丘品牌网站建设,网站定制,虎丘网站建设报价,网络营销,网络优化,虎丘网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
spring事务管理的好处是声明式事务管理,也就是说可以通过IOC配置中指定边界和事务属性,这样spring会自动在指定的事务边界上应用事务属性。
在spring的事务管理中,主要有3个接口,他们分别是:PlatformTransactionManager、TransactionDefinition、TransactionStatus。他们3个具体的关联关系如下:
下面我们详细了解一下上面3个接口的具体作用。
TransactionDefinition:用户描述事务的隔离级别、超时时间、是否为只读事务和事务传播规则等控制事务具体行为的事务属性。PlatformTransactionManager根据TransactionDefinition提供的事务属性配置信息创建事务,并用TransactionStatus描述这个事务的激活事务的状态。在上面我们介绍过TransactionDefinition用来描述事务的相关属性,那么下面我们具体看一下在TransactionDefinition中都包括哪些事务属性。
事务隔离:当前事务和其它事务的隔离程度。在TransactionDefinition中定义了和java.sql.Connection接口中一样的隔离级别:ISOLATION_READ_UNCOMMITTED、ISOLATION_READ_COMMITTED、ISOLATION_REPEATABLE_READ、ISOLATION_SERIALIZABLE。上面介绍的这些常量正好对应在其它文章中提到过的数据库的隔离级别。除此之外TransactionDefinition还包括默认的隔离级别ISOLATION_DEFAULT。它表示使用底层数据库的默认隔离级别。
事务传播:在正常的情况下事务中执行的所有代码都会在一个事务中运行,但spring为我们提供了几种可选的事务传播类型:简单的参与到现有的事务中、或者挂起当前事务、或者创建一个新的事务。
事务超时:事务在超时前能运行多久,超过时间后,事务将回滚。
只读状态:因为只读事务不修改任何数据,所以在有只读操作时可以对只读事务做优化处理,提高运行性能。
TransactionStatus:TransactionStatus表示的是事务的具体运行状态。也就是通过TransactionStatus可以获取到事务运行期的状态信息,也可以通过该接口间接的回滚事务。这是因为该接口继承了SavepointManager,而SavepointManager接口又支持JDBC3.0中新增的保存点的分段事务控制能力。下面我们简单了解一下SavepointManager中所包括的方法。
Object createSavepoint():创建一个保存点对象,以保证事务可以支持回滚到保存点上,也可以调用releaseSavepoint()方法释放一个已经确定不用的保存点。
void rollbackToSavepoint(Object var1):将事务回滚到特定的保存点上,被回滚的保存点将自动释放。
void releaseSavepoint(Object var1):释放一个保存点,如果事务提交,那么所有的保存点都将释放。
除了上述已有的方法外,TransactionStatus还扩展了以下SavepointManager中没有的方法:
boolean hasSavepoint():判断当前事务是否创建了保存点。
boolean isNewTransaction():判断当前事务是否是一个新的事务,如果返回false则表示当前事务是一个已经存在的事务,或者当前操作未运行在事务环境中。
boolean isCompleted():判断当前事务是否已经结束,已经提交事务或者事务回滚都任务当前事务已经结束。
boolean isRollbackOnly():判断当前事务是否已经被标识为rollback-only。
void setRollbackOnly():将当前事务设置为rollback-only。通过该标识spring将此事务回滚。
PlatformTransactionManager:在其它的文章中使我们知道JDBC的事务只能提交或者回滚。在spring中PlatformTransactionManager的作用就是做上述功能的。下面我们看一下PlatformTransactionManager中的所涉及到的方法及其作用。
TransactionStatus getTransaction(TransactionDefinition var1):该方法根据事务定义的信息从事务环境中返回一个已存在的事务,或者创建一个新的事务,并用TransactionStatus记录这个事务的运行状态。
void commit(TransactionStatus var1):根据事务的状态提交事务,如果事务已经被标识为rollback-only,则该方法将执行回滚操作。
void rollback(TransactionStatus var1):将事务回滚,如果调用commit()方法抛出一异常时,则spring会默认调用rollback()方法。
上面我们介绍了spring中有关事务的主要接口,下面我们继续了解一下,在spring中这些接口的具体实现,实际上spring为不同的持久化技术都提供了不同的实现,相关的实现类如下:
spring就是通过这此实现类进而实现spring对事务的管理的,介绍了这么多,我们来看一下在spring中到底怎么用代码的方式也就是声明式事务管理。
这样我们的数据源就支持事务管理了。
到此,关于“Spring对事务的管理和支持”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!