Spring AOP-事务管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring AOP-事务管理相关的知识,希望对你有一定的参考价值。

参考技术A

1、@Transactional使用位置

Ⅰ 写在接口类上,该接口的所有实现类的所有方法都会有事务;
Ⅱ 写在接口方法上,该接口的所有实现类的该方法都会有事务;

Ⅰ 写在实现类上,该类中的所有方法都会有事务;
Ⅱ 写在实现类方法上,该方法上有事务。

建议:写在实现类或实现类的方法上。

2、PlatformTransactionManager

PlatformTransactionManager是Spring中的事务管理接口,具体如下:

3、DataSourceTransactionManager

Spring中JDBC事务管理实现类是DataSourceTransactionManager,所以我们使用MyBatis时,如果需要进行事务管理则配置该事务管理即可。

1、基础准备

jdbc.properties如下:

JdbcConfig如下:

2、测试

1、相关注解

配置类注解,定义在配置类上。
设置当前Spring环境中开启注解式事务支持。

接口、类、方法注解,定义在接口、类、方法上。
为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务)。

2、事务角色

发起事务方,在Spring中通常指代业务层开启事务的方法。

加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法。

3、@Transactional常用属性

true只读事务,false读写事务,增删改要设为false,查询设为true。

设置超时时间单位秒,在多长时间之内事务没有提交成功就自动回滚,-1表示不设置超时时间。

当出现指定异常进行事务回滚。

4、事务传播行为

比如上述测试案例中,我们给log方法上的@Transactional设置了传播属性为REQUIRES_NEW,表示当前事务协调员会自己开启一个事务。并不会因为transfer发生回滚而回滚。

Ⅰ REQUIRED(默认);
Ⅱ SUPPORTS;
Ⅲ MANDATORY;
Ⅳ REQUIRES_NEW;
Ⅴ NOT_SUPPORTED;
Ⅵ NEVER;
Ⅶ NESTED。

以上即为Spring AOP-事务管理的全部内容,感谢阅读。

Spring AOP 管理事务

    <aop:config proxy-target-class="true">
        <aop:pointcut expression="execution(* com.jikexueyuan.dao.impl.*.*(..))" id="cut"/>
        <aop:advisor advice-ref="defaultTransactionAdvice" pointcut-ref="cut"/>        
    </aop:config>
    
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
        <property name="dataSource" ref="datasource"></property>  
    </bean>
    <tx:advice transaction-manager="transactionManager" id="defaultTransactionAdvice">
             <tx:attributes>  
                  <tx:method name="add*" read-only="false"/> 
               <tx:method name="*"/>  
          </tx:attributes> 
    </tx:advice>

 

以上是关于Spring AOP-事务管理的主要内容,如果未能解决你的问题,请参考以下文章

spring事务管理,xml配置aop事务和注解配置aop事务

手写Spring事务框架

Springday03 AOPSpring声明式事务Spring编程式事务

Spring AOP 管理事务

Spring---AOP注解开发&jdbc模板&Spring事务管理

Spring整合JDBC以及AOP管理事务