美文网首页
spring-tx(一)

spring-tx(一)

作者: 一个非专业码农 | 来源:发表于2017-10-23 14:19 被阅读14次

    参考地址

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

    相关文章

      网友评论

          本文标题:spring-tx(一)

          本文链接:https://www.haomeiwen.com/subject/omueuxtx.html