spring-tx(一)

参考地址

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 可能不同,根据数据源的不同可以区别配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容