zoukankan      html  css  js  c++  java
  • 【Log历练手册】Spring事务管理不能提交异常

    Bug记录

    使用@Transactional之后,事务不能提交,费了一番功夫发现是@Transactional(value=”“)这条信息配错,事务管理器没有正常启用

    xml配置文件

    配置文件如下

    <bean id="transactionManager4Demo"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource4Demo" />
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager4Demo" />
    

    配置文件如下说明如下

    <tx:annotation-driven>一共有四个属性如下,
    
    mode:指定Spring事务管理框架创建通知bean的方式。可用的值有proxy和aspectj。前者是默认值,表示通知对象是个JDK代理;后者表示Spring AOP会使用AspectJ创建代理 
    
    
    order:如果业务类除事务切面外,还需要织入其他的切面,通过该属性可以控制事务切面在目标连接点的织入顺序。 
    
    transaction-manager:指定到现有的PlatformTransaction Manager bean的引用,通知会使用该引用
    
    <tx:annotation-driven/>默认使用transactionManager的事务管理器,若bean id命名为transactionManager则不需要设置transaction-manager="transactionManager4Demo"
    

    Spring@Transactional

    事务支持属性如下

    属性 类型 描述
    value String 可选的限定描述符,指定使用的事务管理器
    propagation enum: Propagation 可选的事务传播行为设置
    isolation enum: Isolation 可选的事务隔离级别设置
    readOnly boolean 读写或只读事务,默认读写
    timeout int (in seconds granularity) 事务超时时间设置
    rollbackFor implements Throwable 导致事务回滚的异常类数组
    rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组
    noRollbackFor implements Throwable 不会导致事务回滚的异常类数组
    noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组

    传播行为

    Propagation.REQUIRED:表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。否则,会启动一个新的事务

    Propagation.SUPPORTS: 表示当前方法不需要事务上下文,但是如果存在当前事务的话,那么该方法会在这个事务中运行

    Propagation.MANDATORY:表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常

    Propagation.REQUIRES_NEW:表示当前方法必须运行在它自己的事务中。一个新的事务将被启动。如果存在当前事务,在该方法执行期间,当前事务会被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager

    Propagation.NOT_SUPPORTED:表示该方法不应该运行在事务中。如果存在当前事务,在该方法运行期间,当前事务将被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager

    Propagation.NEVER:表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常

    Propagation.NESTED:表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚。如果当前事务不存在,那么其行为与Propagation.REQUIRED一样。注意各厂商对这种传播行为的支持是有所差异的。可以参考资源管理器的文档来确认它们是否支持嵌套事务

  • 相关阅读:
    40 修改了机器名,portal重装后,还需要做什么?
    39 路径分析小练习
    38 空间查询小练习
    面向对象一些概念简述
    Js函数基本介绍
    JS中的变量和数据类型
    js基础语法
    Css样式优先级
    对响应式布局的理解和认知
    关于Flex布局
  • 原文地址:https://www.cnblogs.com/cunchen/p/9464125.html
Copyright © 2011-2022 走看看