参考地址
https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html
顶层接口
事务策略的顶层接口SPI 是 PlatformTransactionManager
public interface PlatformTransactionManager {
TransactionStatus getTransaction(
TransactionDefinition definition) throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
getTransaction接受TransactionDefinition 的对象,并且返回TransactionStatus(可能返回一个新的事务对象,也可能返回一个当前线程关联的事务对象)
TransactionDefinition 定义个一下几个属性:
- Isolation
定义了当前事务对其他事务是否是隔离的。(比如当前事务是否可以看到其他未提交的事务) - Propagation
事务的传递性(待填) - Timeout
多长时间超时框架会自动回滚当前事务 - Read-only status
是否是提供只读事务。
TransactionDefinition 定义了当前事务需要提供的能力。
getTransaction返回的TransactionStatus 提供一个对事务资源的常见操作和查询当前事务状态的接口。
public interface TransactionStatus extends SavepointManager {
boolean isNewTransaction();
boolean hasSavepoint();
void setRollbackOnly();
boolean isRollbackOnly();
void flush();
boolean isCompleted();
}
举个栗子
一般使用spring事务管理,需要提供一个实现PlatformTransactionManager的资源,现在使用一个简单使用jdbc完成事务操作的配置。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 事务资源管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
根据事务资源不同(使用 JTA,或者hibernate等)使用的PlatformTransactionManager 可能不同,根据数据源的不同可以区别配置。
网友评论