此处主要讲讲事物的属性。

事物属性包含了五个方面:

1.传播行为

2.隔离规则

3.回滚规则

4.事物超时

5.是否只读

一.传播行为

事务的第一个方面是传播行为(propagation behavior)。当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。spring定义了七种传播行为。

1.1  PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

1.2 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

1.3 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

1.4 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

1.5 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

1.6 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

1.7 PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

列:

数据库中有表smts_user_device_info_tmp,字段:USER_ID,DEVICE_TYPE,DEVICE_ID默认都是1.

dao中有三个方法,test1():用来更新user_id=2,test2():用来更新DEVICE_TYPE=2,test3():用来更新DEVICE_ID=2

1.service方法如下:

@Component("testService")
public class TestServiceImpl implements TestService {
@Autowired
private AnnuityApplicationDao annuityApplicationDao;
@Autowired
private Test2Service test2Service; @Override
@Transactional(propagation= Propagation.REQUIRED)
public void fun1() throws Exception {
annuityApplicationDao.test1();
int i = 1/0;
annuityApplicationDao.test2();
} public void fun2() throws Exception{
annuityApplicationDao.test3();
fun1();
} }

若执行fun1()方法,结果如下:事物回滚

若执行fun2()方法,结果如下:

发现事物没起作用,原因可参照:http://blog.csdn.net/seelye/article/details/40144817

若fun1(),fun2()不是在一个类内,会发现事物是起作用的。

在fun2()上注解事物,调用fun2(),环境中没有事物,会新建一个事物,当在fun2中调用fun1时,环境中已经有了事物,则fun1加入当前事物。

2.service方法如下:

@Component("testService")
public class TestServiceImpl implements TestService {
@Autowired
private AnnuityApplicationDao annuityApplicationDao;
@Autowired
private Test2Service test2Service; @Override
@Transactional(propagation= Propagation.SUPPORTS)
public void fun1() throws Exception {
annuityApplicationDao.test1();
int i = 1/0;
annuityApplicationDao.test2();
} @Transactional(propagation = Propagation.REQUIRED)
public void fun2() throws Exception{
annuityApplicationDao.test3();
fun1();
} }

单独调用fun1,事物没有执行,当调用fun2,fun1加入了fun2的事物执行。

3. service如下:

@Component("testService")
public class TestServiceImpl implements TestService {
@Autowired
private AnnuityApplicationDao annuityApplicationDao;
@Autowired
private Test2Service test2Service; @Override
@Transactional(propagation= Propagation.MANDATORY)
public void fun1() throws Exception {
annuityApplicationDao.test1();
annuityApplicationDao.test2();
} @Transactional(propagation = Propagation.REQUIRED)
public void fun2() throws Exception{
annuityApplicationDao.test3();
fun1();
} }

  当单独调用fun1,因为当前没有事物,所以抛出异常,当执行fun2,fun1加入fun2当前事物执行。

浅谈spring 声明式事物的更多相关文章

  1. Spring声明式事物原理分析

    基础准备 pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  2. Spring学习之声明式事物管理

    public List<Student> selectStudent() { Student s = new Student(); s.setName("zhengbin&quo ...

  3. SSH学习——声明式事物管理(Spring)

    1.什么是事物? 事务是一组操作的执行单元,相对于数据库操作来讲,事务管理的是一组SQL指令,比如增加,修改,删除等,事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种出现了差错,比 ...

  4. 【spring基础】spring声明式事务详解

    一.spring声明式事务 1.1 spring的事务管理器 spring没有直接管理事务,而是将管理事务的责任委托给JTA或相应的持久性机制所提供的某个特定平台的事务实现.spring容器负责事物的 ...

  5. spring5 源码深度解析----- @Transactional注解的声明式事物介绍(100%理解事务)

    面的几个章节已经分析了spring基于@AspectJ的源码,那么接下来我们分析一下Aop的另一个重要功能,事物管理. 事务的介绍 1.数据库事物特性 原子性多个数据库操作是不可分割的,只有所有的操作 ...

  6. Spring-Security (学习记录七)--实现FilterInvocationSecurityMetadataSource的类将无法切入声明式事物

    目录 1 查看继承关系 2 说明 3 查看源码: 实现了FilterInvocationSecurityMetadataSource 的类将无法切入声明式事物. 原因: 1 查看继承关系 先查看Fil ...

  7. Spring Data JPA系列4——Spring声明式数事务处理与多数据源支持

    大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第四篇了,先来回顾下前面三篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...

  8. spring声明式事务管理总结

    事务配置 首先在/WEB-INF/applicationContext.xml添加以下内容: <!-- 配置事务管理器 --> <bean id="transactionM ...

  9. spring 声明式事务管理

    简单理解事务: 比如你去ATM机取5000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉5000元钱:然后ATM出5000元钱.这两个步骤必须是要么都执行要么都不执行.如果银行卡扣除了5000块但 ...

随机推荐

  1. SQLSERVER单表CRUD通用方法

    一.适用场景 ①当你书写简单的增删改查心累了 ②当你的项目不考虑并发.高性能 ③当你追求更快速的开发效率 ④当你的业务只涉及单表 二.代码展示 ①单表Insert public bool Insert ...

  2. bzoj4621: Tc605

    应要求写一下这个题的题解. 我的DP很奥(奇)妙(怪),不过跟标算还是殊途同归的(反正怎么做都行……) 先讲一下奥妙的性质吧. 首先,在最终序列中,每个数最多出现一段,并且,对于出现的数,每段数两两之 ...

  3. OI省选算法汇总

    copy from hzwer @http://hzwer.com/1234.html 侵删 1.1 基本数据结构 1. 数组 2. 链表,双向链表 3. 队列,单调队列,双端队列 4. 栈,单调栈 ...

  4. 如何修改SharePoint2013服务器场帐号密码

    服务器远程登录帐号密码修改密码后,如何修改sharepoint服务器场管理员账户密码,今天登录了一下N久以前的搭建sharepoint2013服务器场的一台服务器器,登录进去以后直接提示帐号密码过期需 ...

  5. 浅谈Android样式开发之selector

    引言 上一篇Android UI中文章我们详细介绍了Android中shape标签的使用.通过shape标签我们可以定义矩形.椭圆.环形.直线等效果.不过shape只能定义单一的形状,在实际开发中,我 ...

  6. AssetBundle

    AssetBundle是Unity推荐的一种资源打包方式,与不使用AssetBundle相比,它有如下优点: 1.AssetBundle是经过LZMA压缩过的,所以体积更小. 2.可以将AssetBu ...

  7. TCP学习之二:客户端与服务端的连接

    主要参考张子阳大神的博客:http://www.cnblogs.com/JimmyZhang/category/101698.html TcpClient是对Socket的封装 一个TcpClient ...

  8. Redhat6.4下安装Oracle10g

    Oracle10g_Redhat6.4 安装指南 文档说明 本文借鉴<Redhat_Linux_6.4下Oracle_10g安装配置手册><Redhat 6.4 安装 Oracle1 ...

  9. c++ map、vector、list

    总体来说,使用map最简单.支持查找,获取下标不存在也不会出错 map是使用rbtree结构, vector是用连续获取内存的方法,类似hash结构.list是链表结构, 不支持下标. map: 支持 ...

  10. 配置子目录Web.config使其消除继承,用虚拟目录创建多个网站的方法

    来源:http://www.wtnzone.com/post/2011/02/20/Set-Web-Config-to-Turn-Inheritance-Off.aspx ASP.NET提供了强大的W ...