SSM事务

来源:互联网 发布:现在的淘宝太坑了女孩 编辑:程序博客网 时间:2024/05/01 10:00

事务配置

    1:首先在spring-mybatis的配置文件中添加    <!-- 开启事务注解驱动 -->    <tx:annotation-driven />    该标签的作用是开启事务的注解功能    2:开启事务管理    <!-- 开启事务管理 -->    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    3:在业务层使用@Transactional即可。    如果出现tx标签不识别,可加入如下头文件信息:    <beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"    xsi:schemaLocation="http://www.springframework.org/schema/beans                          http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                          http://www.springframework.org/schema/context                          http://www.springframework.org/schema/context/spring-context-3.1.xsd                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd                          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd                          http://www.springframework.org/schema/mvc                          http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

事务的属性说明

    在使用事务时同时也需要配置一下事务的传播行为,事务的隔离性,事务的超时设置,以及事务在发生什么样的情况下进行事务的回滚。

1:传播行为:

1):@Transactional(propagation=Propagation.REQUIRED) 如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)(2):@Transactional(propagation=Propagation.NOT_SUPPORTED) 容器不为这个方法开启事务。(3):@Transactional(propagation=Propagation.REQUIRES_NEW) 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务(4):@Transactional(propagation=Propagation.MANDATORY) 必须在一个已有的事务中执行,否则抛出异常(5):@Transactional(propagation=Propagation.NEVER) 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)(6):@Transactional(propagation=Propagation.SUPPORTS) 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务

2:隔离性

1):@Transactional(isolation= Isolation.READ_UNCOMMITTED)读取未提交数据(会出现脏读, 不可重复读) 基本不使用(2):@Transactional(isolation = Isolation.READ_COMMITTED)读取已提交数据(会出现不可重复读和幻读)(3):@Transactional(isolation = Isolation.REPEATABLE_READ)可重复读(会出现幻读)(4):@Transactional(isolation = Isolation.SERIALIZABLE)串行化

3:超时设置

@Transactional(timeout=30)//默认是30秒

4:什么异常会回滚

spring默认是当遇到runtimeException的异常或其子类的异常会进行回滚。当遇到不受检查的(unchecked)时就需要使用:    例如://指定回滚,遇到异常Exception时回滚,@Transactional(rollbackFor=Exception.class)。来手动添加异常让其那个不受检查的异常也可以进行回滚。//指定不回滚。但是当遇到运行期异常例外(thrownew RuntimeException("注释");)会回滚@Transactional(noRollbackFor=Exception.class)

注意

    1@Transactional 只能被应用到public方法上,对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能。    2:Spring团队的建议是你在具体的类(或类的方法)上使用事务的注解,当让也可以在接口中使用,但是如果一旦使用在接口上就需要配置接口上使用事务的代理,另外也因为接口上的事务是不能被继承的。这将会导致事务出现错误。所以建议还是把事务使用在类或者类的具体的方法上。
原创粉丝点击