Spring的事务处理

旧时模样 提交于 2019-11-30 05:45:20

事务:一次对数据库的操作就叫做事务,应该符合数据库事务的ACID(原子性、一致性、隔离性、持久性)

一、注解方式

添加tx类标签

           

或者手动引入

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
">

在XML文件里配置事务管理器,及启动事务注解

	<!-- 导入外部的资源文件 -->
	<context:property-placeholder location="classpath:db.properties"/>
	<!-- 配置c3p0数据库连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		
		<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
	</bean>
	<!-- 配置事务管理器 -->
	<bean id="transactionManager" 
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 配置属性,依赖于前面的dataSource数据源(c3p0) -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<!-- 启用事务注解 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>

在需要进行事务处理的方法前添加注解@Transactional
                     propagation: 指定事务的传播行为, 即当前的事务方法被另外一个事务方法调用时如何使用事务, 默认取值为                                                      REQUIRED, 即使用调用方法的事务 REQUIRES_NEW,即事务自己的事务, 调用的事务方法的事务被挂起. 
                     isolation:指定事务的隔离级别, 最常用的取值为 READ_COMMITTED,默认情况下 Spring 的声明式事务对

                                      所有的运行时异常进行回滚. 也可以通过对应的属性进行设置. 通常情况下去默认值即可. 
                      readOnly:指定事务是否为只读. 表示这个事务只读取数据但不更新数据, 这可以优化数据库引擎. 若真的事一个只                                           读取数据库值的方法, 应设置 readOnly=true
                      timeout :指定强制回滚之前事务可以占用的时间.  ,单位为秒 

       示例:

          @Transactional(propagation=Propagation.REQUIRES_NEW,
                 isolation=Isolation.READ_COMMITTED,
                 noRollbackFor={UserAccountException.class})
         @Transactional(propagation=Propagation.REQUIRES_NEW,
                 isolation=Isolation.READ_COMMITTED,
                  readOnly=false,
                 timeout=3) 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!