Spring如何实现spring事务的传播特性性

怎么理解spring事务的传播特性_百度知道
怎么理解spring事务的传播特性
我有更好的答案
Spring中通过Propagation来设置事务的传播属性的,在这个属性中提供了我们其中关于事务传播的特性:
PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。
采纳率:85%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。> 博客详情
& & & &该特性是保证事务是否开启,业务逻辑是否使用同一个事务的保证。当事务在传播过程中会受其影响。其传播特性包括:
& 1、Propagation.REQUIRED
方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。& && &&
& 2、Propagation.REQUIRES_NEW
无论何时自身都会开启事务
& 3、Propagation.SUPPORTS
自身不会开启事务,在事务范围内则使用相同事务,否则不使用事务
& 4、Propagation.NOT_SUPPORTED
自身不会开启事务,在事务范围内使用挂起事务,运行完毕恢复事务
& 5、Propagation.MANDATORY
自身不开启事务,必须在事务环境使用否则报错
& 6、Propagation.NEVER
自身不会开启事务,在事务范围使用抛出异常
& 7、Propagation.NESTED
如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。需要JDBC3.0以上支持。
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥没有更多推荐了,
不良信息举报
举报内容:
Spring事务传播特性实例解析
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!没有更多推荐了,
不良信息举报
举报内容:
spring 事务传播行为实例分析
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!20:14 提问
spring的事务有几种情况?各使用什么情况?
spring的事务有几种情况?各适用什么情况??
Struts的工作原理?
按赞数排序
Spring+Hibernate的实质:
就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。
那么再没整合之前Hibernate是如何实现事务管理的呢?
通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。
一.事务的4个特性:
原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。
一致性:数据不会因为事务的执行而遭到破坏。
隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。
持久性:一个事务一旦提交,它对数据库的改变将是永久的。
二.事务的实现方式:
实现方式共有两种:编码方式;声明式事务管理方式。
基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。
声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。
三.创建事务的时机:
是否需要创建事务,是由事务传播行为控制的。读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。
一种常见的事务管理配置:事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式
&!--定义Hibernate的事务管理器HibernateTransactionManager --&
class="org.springframework.orm.hibernate3.HibernateTransactionManager"&
&!-- 依赖注入上面定义的sessionFactory --&
&!--定义Spring的事务拦截器TransactionInterceptor --&
&bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor"&
依赖注入上面定义的事务管理器transactionManager --&
&property name="transactionManager" ref="transactionManager"/&
&!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 --&
&property name="transactionAttributes"&
&!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 --&
&prop key="browse*"&PROPAGATION_REQUIRED,readOnly&/prop&
&prop key="list*"&PROPAGATION_REQUIRED,readOnly&/prop&
&prop key="load*"&PROPAGATION_REQUIRED,readOnly&/prop&
&prop key="get*"&PROPAGATION_REQUIRED,readOnly&/prop&
&prop key="is*"&PROPAGATION_REQUIRED,readOnly&/prop&
&!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 --&
&prop key="*"&PROPAGATION_REQUIRED&/prop&
&/property&
&!-- 定义BeanNameAutoProxyCreatorf进行Spring的事务处理--&
&bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&
针对指定的bean自动生成业务代理 --&
&property name="beanNames"&
&value&adminService&/value&
&value&columnsService&/value&
&value&newsService&/value&
&value&crawlService&/value&
&value&memberLevelService&/value&
&value&memberService&/value&
&value&categoryService&/value&
&value&merService&/value&
&value&cartService&/value&
&value&ordersService&/value&
&value&trafficService&/value&
&/property&
这个属性为true时,表示被代理的是目标类本身而不是目标类的接口 --&
&property name="proxyTargetClass"&
&value&true&/value&
&/property&
依赖注入上面定义的事务拦截器transactionInterceptor --&
&property name="interceptorNames"&
&value&transactionInterceptor&/value&
&/property&
尤其注意:如下
【以上的事务拦截器和事务自动代理方式实现原理:像Struts2一样,都是凭借强大的拦截器功能对业务逻辑方法的调用进行拦截,然后又BeanNameAutoProxyCreator自动生成事务代理,最后送事务管理器,统一管理】
Propagation
  key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
Isolation Level(事务隔离等级):
1、Serializable:最严格的级别,事务串行执行,资源消耗最大;
2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
4、Read Uncommitted:保证了读取过程中不会读取到非法数据。
隔离级别在于处理多事务的并发问题。我们知道并行可以提高数据库的吞吐量和效率,但是并不是所有的并发事务都可以并发运行,这需要查看数据库教材的可串行化条件判断了
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐

我要回帖

更多关于 事务传播特性 的文章

 

随机推荐