随笔 - 330,  文章 - 1,  评论 - 0,  阅读 - 9025
  1. 编程式事务管理
    对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。

  2. 基于 TransactionProxyFactoryBean的声明式事务管理
    <!-- 事务管理器 -->
        <bean id="myTracnsactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean> 
        <!-- 事务代理工厂 -->
        <!-- 生成事务代理对象 -->
        <bean id="serviceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager" ref="myTracnsactionManager"></property>
            <property name="target" ref="buyStockService"></property>
            <property name="transactionAttributes">
                <props>
                    <!-- 主要 key 是方法   
                        ISOLATION_DEFAULT  事务的隔离级别
                        PROPAGATION_REQUIRED  传播行为
                    -->
                    <prop key="add*">ISOLATION_DEFAULT,PROPAGATION_REQUIRED</prop>
                    <!-- -Exception 表示发生指定异常回滚,+Exception 表示发生指定异常提交 -->
                    <prop key="buyStock">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-BuyStockException</prop>
                </props>
            </property>
            
        </bean>

  3. 基于 @Transactional 的声明式事务管理

    在需要事务管理的方法上添加:( ISOLATION_DEFAULT  事务的隔离级别
          PROPAGATION_REQUIRED  传播行为)
    @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,rollbackFor=BuyStockException.class)
    applicationContenxt.xml添加如下:
    <!-- 事务管理器 -->
        <bean id="myTracnsactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        
        <!-- 启用事务注解 -->
        <tx:annotation-driven transaction-manager="myTracnsactionManager"/>
    ps:@Transactional注解的方式配置文件要简单的多,将事务交给事务注解驱动。它有个缺陷是他会把所有的连接点都作为切点将事务织入进去,显然只需要在buyStock()方法织入事务即可。下面看看最后一种实现,它就可以精准的织入到指定的连接点

  4. 基于Aspectj AOP配置事务

     

    <!-- 事务管理器 -->
        <bean id="myTracnsactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        
        <tx:advice id="txAdvice" transaction-manager="myTracnsactionManager">
            <tx:attributes>
                <!-- 为连接点指定事务属性 -->
                <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED"/>
                <tx:method name="buyStock" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BuyStockException"/>
            </tx:attributes>
        </tx:advice>
        
        <aop:config>
            <!-- 切入点配置 -->
            <aop:pointcut expression="execution(* *..service.*.*(..))" id="point"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="point"/>

    </aop:config>

posted on   vow007  阅读(7)  评论(0编辑  收藏  举报  
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示