@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 ...
随机推荐
- #C++初学记录(阶乘#递归)
练习题目三 用递归进行阶乘 运行代码 #include<iostream> using namespace std; int f(int n); int n; int main() { c ...
- MD5—加密,加盐
MD5的参考盐值:String salt = "212*)()()**()^&UYGbakdkj " ; MD5—加密工具类 package com.demo.tools; ...
- uva 1048 最短路的建图 (巧,精品)
大白书 P341这题说的是给了NT种飞机票,给了价钱和整个途径,给了nI条要旅游的路线.使用飞机票都必须从头第一站开始坐,可以再这个路径上的任何一点下飞机一但下飞机了就不能再上飞机,只能重新买票,对于 ...
- TED #06# Questioning the universe
Stephen Hawking: Questioning the universe 1. 第一段: There is nothing bigger or older than the universe ...
- OpenCV中Denoising相关函数的简单介绍
参考:http://wenhuix.github.io/research/denoise.html一.基本情况 (一)基本方法 Fast Non-Local Me ...
- 20145104张家明 《Java程序设计》第2周学习总结
20145104张家明 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了第三章的内容,看过之后呢,学的和c语言是相通的,看起来就是非常的顺畅,自我感觉良好,第三章主要讲了一 ...
- linux内核分析第四周-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
本周作业的主要内容就是采用gcc嵌入汇编的方式调用system call.系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量 ...
- HDU 5934 Bomb(tarjan/SCC缩点)题解
思路:建一个有向图,指向能引爆对象,把强连通分量缩成一点,只要点燃图中入度为0的点即可.因为入度为0没人能引爆,不为0可以由别人引爆. 思路很简单,但是早上写的一直错,改了半天了,推倒重来才过了... ...
- 【问题解决:未找到端口号】启动报错Circular placeholder reference 'server.port' in property definitions
问题描述: 启动spring boot项目时报错:Circular placeholder reference 'server.port' in property definitions 解决过程: ...
- BZOJ 2342: 【SHOI2011】 双倍回文
题目链接:双倍回文 回文自动机第二题.构出回文自动机,那么一个回文串是一个“双倍回文”,当且仅当代表这个串的节点\(u\)顺着\(fail\)指针往上跳,可以找到一个节点\(x\)满足\(2len_x ...