spring事务管理_01:事务管理框架+声明式事务

阅读开发文档 Example of declarative transaction implementation

2。定义了 事务切入代码 3。定义aspect:切入代码+连接点1。 定义了事务管理器。所有的事务都交给DataSourceTransactionManager来管理。

aop作为一项底层技术 declaration transaction manager: 声明式事务 借助aop技术实现的。
切记: 避免混淆aop和 声明式事务
spring transaction manager: 事务管理器 除了spring实现的这个事务管理器,
还有hibernate实现的事务管理,
还有 JTA, CMT实现的事务管理。
spring事务管理 javaEE采用分层开发,
事务出于业务层。
spring的事务控制都是基于aop的,
可以通过编程的方式实现,也可以通过配置的方式实现。
着重介绍通过配置的方式实现事务控制:
声明式事务
通过配置的方式把事务交给spring管理。
spring事务控制的几个api TransactionDefinition
TransactionDefinition
[1]isolation:
默认是database的设置。
[2]propagation behavior
事务传播行为
1
TransactionDefinition.PROPAGATION_MANDATORY
Supports a current transaction; throws an exception if no current transaction exists.
依赖当前事务,如果当前没有事务,则异常抛出
2
TransactionDefinition.PROPAGATION_NESTED
Executes within a nested transaction if a current transaction exists.
嵌套事务:
在事务中再创建子事务;
3
TransactionDefinition.PROPAGATION_NEVER
Does not support a current transaction; throws an exception if a current transaction exists.
不支持事务, 如果存在事务,则抛出异常
4
TransactionDefinition.PROPAGATION_NOT_SUPPORTED
Does not support a current transaction; rather always execute nontransactionally.
不支持事务,只支持非事务;
5
TransactionDefinition.PROPAGATION_REQUIRED
Supports a current transaction; creates a new one if none exists.
支持当前事务,当前事务存在,就在当前事务中执行,
没有就自己创建一个事务。
6
TransactionDefinition.PROPAGATION_REQUIRES_NEW
Creates a new transaction, suspending the current transaction if one exists.
当前事务存在:
挂起当前事务, 创建一个新事务。
当前事务不存在:
就创建一个新的事务。
7
TransactionDefinition.PROPAGATION_SUPPORTS
Supports a current transaction; executes non-transactionally if none exists.
支持当前事务, 当前事务存在, 就在当前事务中执行, 当事务不存在, 就非事务执行。
[3]timeout:
Only makes sense in combination with PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW.
[4]read-only:
Only makes sense in combination with PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW.
read-only
read/write
TransactionDefinition总结
Note that isolation level and timeout settings will not get applied unless an actual new transaction gets started.
As only PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW and PROPAGATION_NESTED can cause that,
it usually doesn't make sense to specify those settings in other cases.
Furthermore, be aware that not all transaction managers will support those advanced features and thus might throw corresponding exceptions when given non-default values.
The read-only flag applies to any transaction context, whether backed by an actual resource transaction or operating non-transactionally at the resource level.
In the latter case, the flag will only apply to managed resources within the application, such as a Hibernate Session.
请注意,除非启动实际的新事务,否则不会应用隔离级别和超时设置。
由于只有PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED会导致这种情况,在其他情况下指定这些设置通常没有意义。
此外,请注意,并非所有事务管理器都支持这些高级功能,因此在给定非默认值时可能会抛出相应的异常。
read-only 标志适用于任何事务上下文,无论是由实际资源事务支持还是在资源级别以非事务方式操作。
在后一种情况下,该标志仅适用于应用程序内的受管资源,例如Hibernate会话。
TransactionStatus
事务管理器:transaction strategy:
【spring事务管理_01:事务管理框架+声明式事务】PlatformTransactionManager

    推荐阅读