文档章节

PROPAGATION_REQUIRED

Zero零_度
 Zero零_度
发布于 2015/04/07 19:38
字数 627
阅读 165
收藏 2
点赞 0
评论 0

事务传播行为种类

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:

表1事务传播行为类型

事务传播行为类型

说明

PROPAGATION_REQUIRED

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS

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

PROPAGATION_MANDATORY

使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW

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

PROPAGATION_NOT_SUPPORTED

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

PROPAGATION_NEVER

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

PROPAGATION_NESTED

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

当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。

 

<!--Hibernate事务管理器-->
<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
</bean>

<!-- 定义事务拦截器bean-->
<bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <!-- 事务拦截器bean需要依赖注入一个事务管理器-->
  <property name="transactionManager" ref="transactionManager" />
  <property name="transactionAttributes">
   <!-- 下面定义事务传播属性-->
   <props>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
</bean>

<bean id="managerTemplate" abstract="true" lazy-init="true">
<property name="teamDao">
  <ref bean="teamDao" />
</property>
<property name="studentDao">
  <ref bean="studentDao" />
</property>    
</bean>

<bean id ="manager" class="com.zd.service.impl.Manager" parent="managerTemplate" />

<!-- 定义BeanNameAutoProxyCreator-->
   <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
    <property name="beanNames">
           <!-- 下面是所有需要自动创建事务代理的bean-->
           <list>
               <value>manager</value>
           </list>
           <!-- 此处可增加其他需要自动创建事务代理的bean-->
    </property>
       <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
       <property name="interceptorNames">
           <list>
               <!-- 此处可增加其他新的Interceptor -->
               <value>transactionInterceptor</value>
           </list>
       </property>
   </bean>

<!-- 基本数据库操作 -->
<bean id="baseDao" class="com.zd.service.impl.BaseDao">
   <property name="hibernateTemplate">
     <ref bean="hibernateTemplate"/>
   </property>
</bean>

<!-- 班级 -->
<bean id="teamDao" class="com.zd.service.impl.TeamDao">
   <property name="baseDao">
      <ref bean="baseDao" />
   </property>
</bean>

<!-- 学生 -->
<bean id="studentDao" class="com.zd.service.impl.StudentDao">
   <property name="baseDao">
      <ref bean="baseDao" />
   </property>
</bean>

 

public void testSaveTeam() {
  Team team = new Team();
  team.setTeamId(DBKeyCreator.getRandomKey(12));
  team.setTeamName("Class CCC");
  IManager manager = (IManager) SpringContextUtil.getContext().getBean("manager");
  

  Student student = new Student();
  student.setStudentId(DBKeyCreator.getRandomKey(13));
  student.setSex(Student.SEX_FEMALE);
  student.setStudentName("Tom");
  student.setTeamId("60FHDXDIG5JQ");
  manager.saveTeamAndStu(team, student);
  System.out.println("Save Team and Student Success");

本文转载自:http://blog.sina.com.cn/s/blog_5e3fc5cf0100douh.html

共有 人打赏支持
Zero零_度
粉丝 67
博文 1245
码字总数 252866
作品 0
程序员
Spring 的两种事务配置方法到底哪种好,搞不明白

<!-- service基类 --> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true" > <property name="transactio......

xiaoxin
2014/06/11
0
0
spring配置mysql/access动态多数据源切换问题

请教:spring配置mysql/access动态多数据源切换问题,默认的是mysql数据源,当系统需要访问access数据源时,抛出No Session found for current thread异常。 1.access数据源的配置文件如下;...

charleshua111
2014/03/10
522
0
spring使用Hibernate配置双数据源事务问题怎么解决

我使用spring+hibernate配置了两个数据源,不知道事务怎么配置,是需要配置两套sessionFactory,两套transactionManager吗? 以下是我的配置,可以运行但是程序运行会添加两次事务,请问怎么处...

电脑小童
2014/09/04
1K
2
spring aop事务与自定义pointcut冲突,不生效

这是配置

轩霄SS
2017/03/01
381
0
spring3.2+hibernate4.2.8 整合 报错,求指教!

我的配置文件:

sunvim
2013/12/12
535
6
Spring学习笔记十七---事务的转播行为

spring 事务注解 默认遇到throw new RuntimeException("...");会回滚 需要捕获的throw new Exception("...");不会回滚 // 指定回滚 @Transactional(rollbackFor=Exception.class) public voi......

jimyao
2016/03/13
25
0
Spring 传播行为(PROPAGATION)

Spring 传播行为 Spring 中定义的七种传播行为,因为Spring将事务传播行为是交给事务管理器去实现的,所以使用之前第一步就是查看我们使用的事务管理器是否支持下面的七中传播行为: PROPAG...

年少爱追梦
2016/04/16
659
0
Spring的四种声明式事务的配置-Hibernate事务

Spring的四种声明式事务的配置-Hibernate事务 以下两个bean的配置是下面要用到的。 <!-- 定义事务管理器(声明式的事务) --> <bean id="transactionManager" class="org.springframework.o...

黑马王子
2011/07/07
0
0
Spring.NET学习笔记17——事务传播行为(基础篇) Level 200

上篇我们学习了Spring.NET的事务机制。回顾一下,实现事务需要在方法上标记[Transaction]。在很多情况下,事务往往与业务分离。Spring.NET提供了事务代理帮我们管理这些事务,我们可以通过T...

长平狐
2012/06/11
150
0
spring aop 事务回滚失败(求助)

在SSH下搭建的环境,但是就是事务回滚不成功,手动控制事务却成功。。。 声明式事务:

稀薄空气
2014/05/30
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

PostgresSQL 查看当前schema下所有的函数/存储过程

selectroutine_name from information_schema.routineswhere routine_catalog = 'YourDBName'and routine_schema = 'YourSchemaName'order by routine_name;...

Leyxiao
2分钟前
0
0
去除bootstrapValidator 的校验结果

$("#form").data('bootstrapValidator').destroy();//会报没有这个方法,很奇怪 $('#form').data('bootstrapValidator',null); $('#form').bootstrapValidator();...

暗中观察
4分钟前
0
0
java环境安装

1、首先下载jdk安装包,一般去官网,官网需要登录才可以下载。 2、下载完成双击运行,想改路径改下路径,比较简单。安装jdk安装完,会弹出个窗口,提示开始安装jre的位置,我这里窗口比较奇葩...

朝如青丝暮成雪
5分钟前
0
0
Linux Command

Copy with progress rsync -r --progress source dest

Lyle_W
6分钟前
0
0
个灯数据营销,帮你找回被浪费的广告费

近日,个灯受邀出席被喻为广告营销业界的年度盛会——第八届梅花网传播业大展北京站的活动。 在展会上,个灯总经理严雯婷女士带来了《数据增能,营销智能》的主题演讲,以理论与实践相结合的...

个推
8分钟前
0
0
java的反射机制理解

一、概念说明 java的反射机制,是在运行状态下,可以动态获取任意一个类的属性和方法;可以动态调用一个对象任意方法; 二、反射相关类 java.lang.Class; //类 java.lang.re...

盼望明天
12分钟前
0
0
nginx反向代理-多端口映射

代码解释 1.1 http:www.baidu.test.com默认是80,访问“/”利用反向代理,然后访问本地8083; 1.2 8083代表本地的前端工程访问地址,前端需要访问后台数据,”/”,继续代理到后台地址9803; ...

lilugirl
13分钟前
0
0
Jfinal使用log4j2打印日志

1,添加maven配置 <properties><log4j2.version>2.11.0</log4j2.version><slf4j.version>1.7.25</slf4j.version></properties> <!--slf4j及log4j2日志 --><dependency> ......

iborder
14分钟前
0
0
如何在Rancher 2.0上快速部署Datadog

Datadog是一种流行的托管监控解决方案,用于聚合和分析分布式系统的指标和事件。从基础架构集成到协作仪表板,Datadog为用户提供了一个简洁的单一窗格视图,用户可以快速查看对其最重要的信息...

RancherLabs
17分钟前
0
0
Java示例演示Functor 和monad

This article was initially an appendix in our Reactive Programming with RxJavabook. However introduction to monads, albeit very much related to reactive programming, didn't suit......

Quan全
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部