1、统观spring事务,围绕着两个核心PlatformTransactionManager和TransactionStatus spring提供了几个关于事务处理的类: TransactionDefinition /事务属性定义TranscationStatus /代表了当前的事务,可以提交,回滚。PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。一般事务定
2、义步骤:TransactionDefinition td = new TransactionDefinition();TransactionStatus ts = transactionManager.getTransaction(td);try /do sthtransactionMmit(ts);catch(Exception e)transactionManager.rollback(ts);spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。编程式主要使用transactionTemplate。省
3、略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象. void add()transactionTemplate.execute( new TransactionCallback()pulic Object doInTransaction(TransactionStatus ts) /do sth声明式:使用TransactionProxyFactoryBean:PROPAGATION_REQUIREDPROPAGATION_REQUIREDPROPAGATION_REQUIRED,readOnly围绕Poxy的动态代理 能够自动的提交和回滚事务org.springframewor
4、k.transaction.interceptor.TransactionProxyFactoryBeanPROPAGATION_REQUIRED-支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS-支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY-支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW-新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED-以非事务方式执行操 ,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER-以非事务方式执行,如果当前存在事务, 抛出异常。 PROPAGATION_NESTED-如果当前存在事务, 在 事务 执行。如果当前没有事务, 行 PROPAGATION_REQUIRED类 的操 。