@Transactional、Spring的声明式事务

时间:2021-09-22 03:22:47

传送门

一、Spring的声明式事务

需要在xml文件中配置

<!--配置事务管理器类-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--这里的dataSource引用前边配置好的dataSource-->
<constructor-arg name="dataSource" ref="dataSource"/>
</bean> <!--事务的建议-->
<tx:advice id="interceptor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="select*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice> <!--配置事务切面-->
<aop:config proxy-target-class="true" expose-proxy="true">
<!--切点为该包下的所有类的所有方法,任意返回值,任意参数-->
<aop:pointcut id="txPointCut" expression="execution(* geek.service.*.* (..))"/>
<!--在切点处加入事务-->
<aop:advisor advice-ref="interceptor" pointcut-ref="txPointCut"></aop:advisor>
</aop:config>

<tx:advice.../>节点详情如下图

@Transactional、Spring的声明式事务

name:指定方法的名称可以使用通配符

propagation:指定事务的传播行为,默认为为PROPAGATION_REQUIRED

PROPAGATION_REQUIRED:要求在事务环境中执行该方法,如果当前执行线程已经处于事务环境中,则直接调用;如果当前线程不处于事务环境中,则启动新的事务后执行该方法.

PROPAGATION_MANDATORY:要求调用该方法的线程必须处于事务中,否则抛出异常

PROPAGATION_NESTED:即使执行该方法的线程已经处于事务中们也依然启动新的事务,方法在嵌套的事务里执行;即使执行该方法的线程未处于事务环境中,也启动新的事务,然后执行该方法,此时与默认情况一致.

PROPAGATION_NEVER:不允许调用该方法的线程处于事务环境中,如果调用该方法的线程处于事务环境中,则抛出异常

PROPAGATION_NOT_SUPPORTED:如果调用该方法的线程处于事务中,则先暂停当前事务,然后执行该方法

PROPAGATION_REQUIRED_NEW:该方法要求在新的事务环境中执行,如果当前执行线程已处于事务环境中,则先暂停当前事务,启动新的事务后执行该方法,如果当前线程不处于事务环境中,则启动新的事务后执行方法.

PROPAGATION_SUPPORTS:如果当前线程处于事务环境中,则使用当前事务,否则不使用事务

isolation:指定事务的隔离级别

timeout:指定事务的超时时间

read-only:指定事务是否只读

rollback-for:指定触发事务回滚的异常类(全类名限定),可以指定多个,用英文逗号,隔开

no-rollback-for:指定不处罚事务回滚的异常类(全类名限定),可以指定多个,用英文逗号,隔开

二、使用@Transactional注解进行事务管理

需要在xml文件里配置

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
<!--启动@Transactional注解-->
<tx:annotation-driven transaction-manager = "transactionManager"/>

@Transactional注解即可以用于修饰Spring Bean类,也可以用于修饰Bean类中的某个方法

如果使用该注解修饰Bean类,表明这些事务设置对整个Bean起作用;如果使用该注解修饰Bean类的方法,则表明这些事务设置只对该方法有效。

@Transactional注解的属性:

isolation:用于指定事物的隔离级别.默认为底层事务的隔离级别

noRollbackFor:用于指定遇到某个特定异常时强制不回滚事务

noRollbackForClassName:指定遇到特定的多个异常时强制不回滚事务,可以指定多个异常类名

propagation:指定事务的传播行为

readOnly:指定是否只读

rollbackFor:指定遇到特定异常时强制回滚事务

rollbackForClassName:指定遇到特定的多个异常时强制回滚事务.可以设置多个异常类名

timeout:指定事务的超时时长

@Transactional注解中所指定的属性与<tx:advice.../>元素中所指定的事务属性基本上是对应的。

@Transactional、Spring的声明式事务的更多相关文章

  1. Spring之声明式事务

    在讲声明式事务之前,先回顾一下基本的编程式事务 编程式事务: //1.获取Connection对象 Connection conn = JDBCUtils.getConnection(); try { ...

  2. 【Spring】——声明式事务配置详解

    项目中用到了spring的事务: @Transactional(rollbackFor = Exception.class, transactionManager = "zebraTrans ...

  3. Spring AOP声明式事务异常回滚&lpar;转&rpar;

    转:http://hi.baidu.com/iduany/item/20f8f8ed24e1dec5bbf37df7 Spring AOP声明式事务异常回滚 近日测试用例,发现这样一个现象:在业务代码 ...

  4. 使用注解实现Spring的声明式事务管理

    使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制 ...

  5. Spring&lpar;四)Spring JdbcTemplate&声明式事务

    JdbcTemplate基本使用 01-JdbcTemplate基本使用-概述(了解) JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装.spr ...

  6. 保护亿万数据安全,Spring有&OpenCurlyDoubleQuote;声明式事务”绝招

    摘要:点外卖时,你只需考虑如何拼单:选择出行时,你只用想好目的地:手机支付时,你只需要保证余额充足.但你不知道这些智能的背后,是数以亿计的强大数据的支持,这就是数据库的力量.那么庞大数据的背后一定会牵 ...

  7. spring aop 声明式事务管理

    一.声明式事务管理的概括 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一. Spring的声明式事务顾名思义就是采用声明 ...

  8. spring的声明式事务,及redis事务。

    Redis的事务功能详解 http://ghoulich.xninja.org/2016/10/12/how-to-use-transaction-in-redis/ MULTI.EXEC.DISCA ...

  9. Spring AOP声明式事务异常回滚

    近日测试用例,发现这样一个现象:在业务代码中,有如下两种情况,比如:throw new RuntimeException("xxxxxxxxxxxx"); 事物回滚throw ne ...

随机推荐

  1. 利用节点更改table内容

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> new document ...

  2. HttpClient——Get&comma;Post

    package com.ch.day5_httpclient; import java.util.List; import com.ch.myutils.NetWorkUtil; import com ...

  3. 在Sublime Text3上面更加方便愉快的写php

    写php代码,elcipse体积太大,开起来太麻烦,记事本又没有什么标识,稍不留神就会出现;没加.大括号没对全的尴尬情况.所以我选择使用Sublime. 推荐几个 sublime插件:sublimeL ...

  4. 上海西服定制Angry Eagle *西服,私人订制你的美

    上海西服定制Angry Eagle *西服,私人订制你的美 上海西服定制Angry Eagle *西服,私人订制你的美

  5. Redis 命令参考

    Redis 命令参考 http://redis.readthedocs.org/en/latest/index.html

  6. 有用的BitConverter

    肯定有用的到的转换,记录下来. ///double =>ieee754 double d = 0.12345; byte[] IEEE754 = BitConverter.GetBytes(d) ...

  7. Chapter 1 First Sight——6

    "You didn't need to do that, Dad. I was going to buy myself a car." 你不需要这样,父亲,我会自己买一辆车的 &q ...

  8. Python 内置的一些高效率函数用法

    1.  filter(function,sequence) 将sequence中的每个元素,依次传进function函数(可以自定义,返回的结果是True或者False)筛选,返回符合条件的元素,重组 ...

  9. (一)flask-sqlalchemy的安装和配置

    在使用flask-sqlalchemy之前要先了解ORM模型,什么叫做ORM模型 一.什么是ORM ORM 全拼Object-Relation Mapping. 称为对象-关系映射 主要实现模型对象到 ...

  10. Apache ZooKeeper 服务启动源码解释

    转载:https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper-code/ 本文首先讲解了 Apache ZooKeeper 服 ...