传送门
一、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 ...
随机推荐
-
利用节点更改table内容
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> new document ...
-
HttpClient——Get,Post
package com.ch.day5_httpclient; import java.util.List; import com.ch.myutils.NetWorkUtil; import com ...
-
在Sublime Text3上面更加方便愉快的写php
写php代码,elcipse体积太大,开起来太麻烦,记事本又没有什么标识,稍不留神就会出现;没加.大括号没对全的尴尬情况.所以我选择使用Sublime. 推荐几个 sublime插件:sublimeL ...
-
上海西服定制Angry Eagle *西服,私人订制你的美
上海西服定制Angry Eagle *西服,私人订制你的美 上海西服定制Angry Eagle *西服,私人订制你的美
-
Redis 命令参考
Redis 命令参考 http://redis.readthedocs.org/en/latest/index.html
-
有用的BitConverter
肯定有用的到的转换,记录下来. ///double =>ieee754 double d = 0.12345; byte[] IEEE754 = BitConverter.GetBytes(d) ...
-
Chapter 1 First Sight——6
"You didn't need to do that, Dad. I was going to buy myself a car." 你不需要这样,父亲,我会自己买一辆车的 &q ...
-
Python 内置的一些高效率函数用法
1. filter(function,sequence) 将sequence中的每个元素,依次传进function函数(可以自定义,返回的结果是True或者False)筛选,返回符合条件的元素,重组 ...
-
(一)flask-sqlalchemy的安装和配置
在使用flask-sqlalchemy之前要先了解ORM模型,什么叫做ORM模型 一.什么是ORM ORM 全拼Object-Relation Mapping. 称为对象-关系映射 主要实现模型对象到 ...
-
Apache ZooKeeper 服务启动源码解释
转载:https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper-code/ 本文首先讲解了 Apache ZooKeeper 服 ...