美文网首页
spring配置事务

spring配置事务

作者: 江小石 | 来源:发表于2017-08-23 14:45 被阅读0次

    maven project下如果有多个模块,事务管理相关配置在web的项目。
    spring-application.xml

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
    <!-- 对数据源进行事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" 
    p:dataSource-ref="multipleDataSource"/>
    

    spring中的@Transactional 放在类级别 和 方法级别 上有什么不同?
    @Transactional放在类级别上等同于该类的每个方法都放上了@Transactional

    事务管理失效的情况:

    1. 类内部方法调用:service有两个方法A和B,A方法里面调用B,希望B遇到runtime异常会回滚事务,所以B配置了@Transactional,但是A没配。那么调用A的时候不会产生事务,遇到异常没有回滚。如果从外部类直接调用B方法,则事务是可以正常生效的。
      原因是spring之所以可以对开启@Transactional的方法B进行事务管理,是因为Spring为当前类生成了一个代理类,然后在执行相关方法时,会判断这个方法有没有@Transactional注解,如果有的话,则会开启一个事务。 但是,上面A方法内部调用B方法调用方式时,在调用B时,使用的并不是代理对象,从而导致@Transactional失败。
    2. @Transactional 注解应该只被应用到 public 方法上

    @Transactional 注解标注的方法中不要出现网络调用、比较耗时的处理程序,因为,事务中数据库连接是不会释放的,如果每个事务的处理时间都非常长,那么宝贵的数据库连接资源将很快被耗尽。

    相关文章

      网友评论

          本文标题:spring配置事务

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