@Transactional、Spring的声明式事务
传送门
一、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.../>节点详情如下图

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的声明式事务的更多相关文章
- Spring之声明式事务
在讲声明式事务之前,先回顾一下基本的编程式事务 编程式事务: //1.获取Connection对象 Connection conn = JDBCUtils.getConnection(); try { ...
- 【Spring】——声明式事务配置详解
项目中用到了spring的事务: @Transactional(rollbackFor = Exception.class, transactionManager = "zebraTrans ...
- Spring AOP声明式事务异常回滚(转)
转:http://hi.baidu.com/iduany/item/20f8f8ed24e1dec5bbf37df7 Spring AOP声明式事务异常回滚 近日测试用例,发现这样一个现象:在业务代码 ...
- 使用注解实现Spring的声明式事务管理
使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制 ...
- Spring(四)Spring JdbcTemplate&声明式事务
JdbcTemplate基本使用 01-JdbcTemplate基本使用-概述(了解) JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装.spr ...
- 保护亿万数据安全,Spring有“声明式事务”绝招
摘要:点外卖时,你只需考虑如何拼单:选择出行时,你只用想好目的地:手机支付时,你只需要保证余额充足.但你不知道这些智能的背后,是数以亿计的强大数据的支持,这就是数据库的力量.那么庞大数据的背后一定会牵 ...
- spring aop 声明式事务管理
一.声明式事务管理的概括 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一. Spring的声明式事务顾名思义就是采用声明 ...
- spring的声明式事务,及redis事务。
Redis的事务功能详解 http://ghoulich.xninja.org/2016/10/12/how-to-use-transaction-in-redis/ MULTI.EXEC.DISCA ...
- Spring AOP声明式事务异常回滚
近日测试用例,发现这样一个现象:在业务代码中,有如下两种情况,比如:throw new RuntimeException("xxxxxxxxxxxx"); 事物回滚throw ne ...
随机推荐
- ReactNative 环境配置
一直是从事iOS的开发,现在研究下mac环境下reatNative的环境配置: 1. 安装HomeBlew(OS系统上的一个安装包管理器,安装后可以方便后续安装包的安装.) 终端命令: ruby -e ...
- placement new--《C++必知必会》 条款35
placement new是重载operator new的一个标准.全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本 ...
- 1:1 Struts2概述
jar包下载
- 77. Combinations(回溯)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. Example: I ...
- uva11404
这题说的是给了一个长度为n的字符串(1000)求最长回文子序列,并输出当str[i]==ste[j]时dp[i][j]=dp[i+1][i-1]+2 否则 dp[i][j]=Max(dp[j+1][i ...
- 20145221 《Java程序设计》第一周学习总结
20145221 <Java程序设计>第一周学习总结 教材学习内容总结 第一周内容已在假期完成,详见博客: Hello Java! 开源中国的代码托管 代码调试中的问题和解决过程 第一周内 ...
- Spring Data JPA 关系映射(一对一,一对多,多对多 )
CascadeType.REMOVE 级联删除操作,删除当前实体时,与它有映射关系的实体也会跟着被删除.CascadeType.MERGE 级联更新(合并)操作,当Student中的数据改变,会相应地 ...
- Python3基础 print 输出helloworld
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- git-format-patch如何指定补丁生成的Subject格式
答:使用-N来指定,如: git format-patch -N <commit-id> 生成的补丁中Subject将以[PATCH]的格式呈现,例如:Subject: [PATCH] a ...
- Vim提示E325(锁机制)
背景 用vim命令处理一些超大文件时,有时会遇到卡死现象,不得不强制退出.但是,再次用vim命令访问这个文件时,会出现“E325:ATTENTION”提示.如果不做处理,以后每次都会出现. 分析 经过 ...