A类   callBack_test()

B类   testadd()

C类   select(),得查询到B类testadd方法中新增的数据。以及初始化一些属性

场景:A类 嵌套 B类  B类嵌套C类;都是由spring控制事务。

要求:B类testadd方法中不受spring事务控制,单独新开个事务运行,可以使C类查询的到。

问题:A类是系统底层方法,必须受事务控制。且C类必须查询到刚刚add的数据。

分析:初步分析为:Spring事务传播性导致的,从A类开启的事务,就有完结。为了避免这样的情况。最好将相关类。不要让spring控制事务。

解决:B类中testadd()方法显示开启事务。方法例如以下:

//testadd方法中数据不受事务控制(要求:是否下发成功。不影响兴许代码运行;因此要开启一个新事务)

  //开启新事务,防止跟其它事务混淆

  DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) SpringContextFactory

  .getBean("transactionManager");

  DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 

  def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); //事物隔离级别,开启新事务,与A类和B类不使用同一个事务。

  TransactionStatus status = transactionManager.getTransaction(def); //获得事务状态

try{

**************代码逻辑****************

transactionManager.commit(status);

  }catch (Exception e) {

   // TODO: handle exception

   transactionManager.rollback(status);

  }

补充:

将B类中testadd方法配置成不让spring事务控制,testadd方法显示开启事务。手动提交。

尝试:

将B类的testadd方法增加spring事务控制中,且配置事务级别为PROPAGATION_REQUIRES_NEW,

不起作用,原因是直接把当前事务给挂起了

  • PROPAGATION_REQUIRED:假设当前没有事务,就新建一个事务,假设已经存在一个事务,就增加到这个事务中。

    这是最常见的选择。

  • PROPAGATION_SUPPORTS:支持当前事务,假设当前没有事务。就以非事务方式运行。
  • PROPAGATION_MANDATORY:使用当前的事务,假设当前没有事务,就抛出异常。
  • PROPAGATION_REQUIRES_NEW:新建事务,假设当前存在事务,把当前事务挂起。

  • PROPAGATION_NOT_SUPPORTED:以非事务方式运行操作,假设当前存在事务。就把当前事务挂起。

  • PROPAGATION_NEVER:以非事务方式运行。假设当前存在事务。则抛出异常。

  • PROPAGATION_NESTED:假设当前存在事务,则在嵌套事务内运行。假设当前没有事务,则运行与PROPAGATION_REQUIRED类似的操作

2. 备注:

疑问:怎样手动提交spring管理的事务?注:spring事务级别是PROPAGATION_REQUIRED

答案:首先在类開始部分。开启一个事务,事务的隔离级别假设是PROPAGATION_REQUIRED。手动提交事务不起作用。

事务的隔离级别须要配置成.PROPAGATION_REQUIRES_NEW。手动提交事务才干起作用。

//开启新事务,防止跟其它事务混淆

  DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) SpringContextFactory

  .getBean("transactionManager");

  DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 

  def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); //事物隔离级别,开启新事务,与A类和B类不使用同一个事务。

TransactionStatus status = transactionManager.getTransaction(def); //获得事务状态

參考引用:http://blog.csdn.net/ziyunlong1984/article/details/7725585

http://blog.chinaunix.net/uid-10289334-id-2964925.html

http://blog.csdn.net/hy6688_/article/details/44763869

Spring嵌套事务控制的更多相关文章

  1. 【Spring】Spring 事务控制

    Spring 事务控制 Spring 事务控制介绍 JavaEE 体系进行分层开发,事务控制位于业务层,Spring 提供了分层设计业务层的事务处理解决方案. Spring 的事务控制都是基于 AOP ...

  2. Spring Security控制权限

    Spring Security控制权限 1,配置过滤器 为了在项目中使用Spring Security控制权限,首先要在web.xml中配置过滤器,这样我们就可以控制对这个项目的每个请求了. < ...

  3. Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)

    关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...

  4. 转:spring 的控制反转

    文章一,原文地址:http://blog.sina.com.cn/s/blog_63804f6f0100kfx0.html 控制反转:       IoC(Inversion of Control,控 ...

  5. 【SSH】——spring的控制反转和依赖注入

    spring是一个轻量级的容器框架,主要是为了使企业的开发变得简单.高效.无论是从大小还是开销来讲,他都可以算是轻量级的,也是非侵入性的. 下图是spring的框架示意图,说到spring,就不得不提 ...

  6. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  7. Spring IoC控制反转创建实例

    Spring IoC控制反转创建实例写一个配置文件beans.xml,配置文件的约束可以访问:完整链接:https://repo.spring.io/libs-release-local/org/sp ...

  8. SSM框架之Spring(5)JdbcTemplate及spring事务控制

    Spring(5)JdbcTemplate及spring事务控制 ##1.JdbcTmeplate 它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装.spring ...

  9. spring security控制session

    spring security控制session本文给你描述在spring security中如何控制http session.包括session超时.启用并发session以及其他高级安全配置. 创 ...

随机推荐

  1. MySQL连接使用及分类

    SQL连接 SQL 连接(JOIN)子句用于将数据库中两个或者两个以上表中的记录组合起来.连接通过共有值将不同表中的字段组合在一起. 考虑下面两个表,(a)CUSTOMERS 表:+----+---- ...

  2. 教你轻松在React Native中集成统计(umeng)的功能(最新版)

    关于在react-native中快速集成umeng统计,网上的文章或者教程基本来自----贾鹏辉老师的文章http://www.devio.org/2017/09/03/React-Native-In ...

  3. 剑指Offer(书):剪绳子

    题目:给你一根长度为n的绳子,请把绳子剪成m段,每段绳子的长度记为k[0],k[1]....,k[m].请问k[0]xk[1]x...,k[m]可能的最大乘积是多少.例如:长度为8剪成2 3 3 得到 ...

  4. NYOJ 237 游戏高手的烦恼

    游戏高手的烦恼时间限制:1000 ms | 内存限制:65535 KB难度:5描述有一位传说级游戏高手,在闲暇时间里玩起了一个小游戏,游戏中,一个n*n的方块形区域里有许多敌人,玩家可以使用炸弹炸掉某 ...

  5. (4)主成分分析Principal Component Analysis——PCA

    主成分分析Principal Component Analysis 降维除了便于计算,另一个作用就是便于可视化. 主成分分析-->降维--> 方差:描述样本整体分布的疏密,方差越大-> ...

  6. 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]CF-236B. Easy Number Challenge

    B. Easy Number Challenge time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  7. 日志不得应用情况切换强制standby改变状态为primary

    日志不得应用情况切换备库为主库 备库运行如下: alter database recover managed standby database disconnect from session; alt ...

  8. HDU 3397 双lazy标记的问题

    题目大意 对一个只有0和1的序列,支持以下几种操作1.将区间所有的值变成12.将区间所有的值变为03.将区间的0和1翻转(0变成1 1变成0)4.求区间中1的个数5.求区间连续最长的1的个数 http ...

  9. hdu 1711kmp裸题

    #include<stdio.h> #define N 1000050 int text[N],t[N],next[N],n,m; void getnext() { int j=0,k=- ...

  10. 两行代码搞定UI主流框架

    XCNavTab XCNavTab适用于快速搭建NavigationController和TabBarController相结合的框架 https://github.com/xiaocaiabc/XC ...