Spring 配置事务

Spring的事务配置有两种

一、基于注解

配置流程:

1、Spring配置文件配置需要加入:

<!-- 定义事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" /><!-- ref:引入数据源  -->
</bean>

<!-- 配置 Annotation 驱动,扫描@Transactional注解的类定义事务 <!-- 启动事物注解 transaction-manager的值必须和上面这个bean的id一样---->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

2、在需要使用事务的方法上面加入@Transactional注解。

@Transactional注解的属性:

1)事物的传播行为:propagation,即当前事物方法被另一个事物方法调用时如何使用事物,默认取值为REQUIRED,即使用调用的方法的事物。

2)事物的隔离级别:isolation:指定事务的隔离级别,最常用的取值为:READ_COMMITTED,读以提交。

3)事务回滚:

    (1)noRollbackFor、noRollbackForClassName:对这个异常不进行回滚 通常情况下取默认值即可。

    (2)rollbackFor、rollbackForClassName:对这个异常进行回滚 通常情况下取默认值即可。

4)只读事务:readOnly,只能读取数据,可以帮助数据库引擎优化。如果是只读,应设置:readOnly=true

5)强制回滚时间:timeout:指定强制回滚的时间,单位秒,如该方法执行了5秒,而该属性设置的是2秒,如果到2秒了,该方法还没有执行完,该事务也会对该方法进行强制回滚。

写法如下:

/**
     * 事物注解
     * 使用propagation 指定事物的传播行为,即当前事物方法被另一个事物方法调用时如何使用事物,默认取值为REQUIRED,即使用调用方法的事物
     * REQUIRES_NEW:使用自己的事物,调用的事物方法的事物被挂起。
     * isolation:指定事务的隔离级别,    最常用的取值为:READ_COMMITTED,读以提交
     * noRollbackFor:对这个异常不进行回滚 通常情况下取默认值即可。
     * rollbackFor:对这个异常进行回滚
     * readOnly:只读事务,只能读取数据,可以帮助数据库引擎优化。如果是只读,应设置:readOnly=true
     * timeout:指定强制回滚的时间,单位秒,如该方法执行了5秒,而该属性设置的是2秒,如果到2秒了,该方法还没有执行完,该事务也会对该方法进行强制回滚。
     */
    @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED,
            noRollbackFor={UserException.class},noRollbackForClassName="UserException",
            rollbackFor={UserException.class},rollbackForClassName="UserException",
            readOnly=false,timeout=100)
    public void updatUser(){
        System.out.println("需要用到事务的方法");
    }


而通常情况是,使用事物,不需要设置@Transactional注解的属性,直接把它写在方法上面就可以了。
 

二、基于xml文件

1、只需要在Spring配置文件中进行一下配置就可以了。

<!-- 配置事物管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" /><!-- ref:引入数据源  -->
	</bean>
	<!-- 配置事务属性,transaction-manager的值必须和上面这个bean的id一样 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 根据方法名指定事务属性 -->
			<tx:method name="updatUser" 
				propagation="REQUIRED" isolation="READ_COMMITTED" 
				no-rollback-for="UserException.class" read-only="false" 
				rollback-for="UserException.class" timeout="5"/><!-- updatUser:对该方法进行事物的属性配置 -->
			<tx:method name="*"/><!-- 代表所有方法,所有的事物取默认配置 -->
			<tx:method name="get*" read-only="true"/><!-- 可以使用通配符的写法,所有使用get开头的方法,它的事务都是只做查询 -->
		</tx:attributes>
	</tx:advice>
	<!-- 配置事务切入点,以及把事务切入点和事务属性关联在一起 -->
	<aop:config>
		<!-- 事务的切入点,execution切入点表达式 -->
		<aop:pointcut expression="execution(* com.qw.service.impl.*.*(..))" id="txPointcut"/>
		<!-- 使用aop,让事务属性和事务切入点关联 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
	</aop:config>

参考资料:https://blog.csdn.net/java_xuetu/article/details/80036094

Thinkingcao CSDN认证博客专家 Java Spring Boot 微服务
CSDN2019年度博客之星、博客专家,专注架构、Java、Spring、SpringBoot、SpringCloud、微服务、数据库、分布式、中间件、源码分析、JVM性能调优、K8S等领域
微信搜索公众号:「Thinking曹」,一个执着于架构的JAVA基层码农,每天带你学习新知识。
相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值