Spring事务不同传播属性差异总结-创新互联

spring事务的传播属性列表如下:

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的馆陶网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

REQUIRED:support a current transaction,creat a new one if none exists;tihs is the default setting of a tansaction annotation

required的传播属性是事务的默认属性,如果父方法有事务,那么required就加入父方法的事务,如果父方法,没有事务,新建一个自己的事务。

SUPPORTS: support a current transaction, execute non-transacitonally if none exists.

supports的传播属性中有一句和required一模一样的一句话,support a current transaction ,这句话的意思就是父类方法有事务,那么就加入父类方法的事务,这个是和required是一样的。唯一的区别就是,在父方法没有事务的情况下,添加了supports注解的方法也不使用事务,所以这个传播特性就是和父方法保持一致。

MANDATORY:supports a current transaction,throw an exception if none exists

mandatory的中文解释是 强制的,法定的,第一句和上面两个属性一样,所以父方法有事务,加入。但是父方法没有事务,就抛出异常。

REQUIRES_NEW:creat a new transaction ,and suspend the current transaction if one exists.

requires_new:这属性和上面三个是有较大差异的,因为无论父方法有没有事务,子方法都会新开一个事务,如果父方法有事务,会将父方法的事务给挂起来。这样这两个事务的成功和失败是没有强相关性的,子事务失败了,如果父事务进行了异常捕获,那么父方法也是可以单独成功的,父方法在子方法提交成功后在失败,此时的子方法也是成功提交了。

NOT_SUPPORTED:execute non-transactionlly ,suspend the current transaction if one exists

not_supported和requires_new有一个共同的相似点,就是父方法如果有了事务,要将事务给挂起,不过区别就是requires_new新开一个事务,而not_supported就只没有事务的模式下进行执行。

NEVER:execute non-transaction,throws an exception if a transaction exists.

never要和mandatory对比看待,一个是没有事务抛出异常,而这个是父方法有事务,就抛出异常。

NESTED:execute within a nested transaction if a current transaction exists.

nested:中文意思是嵌套,这个属性是要和REQUIRES_NEW对比看待,REQUIRES_NEW中两个事务的成功和失败没有强关联性,而NESTED的话,父事务失败了,子事务也会跟着回滚,但是子事务失败了,如果父方法加上try-catch的话,就只有子方法的数据会回滚。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:Spring事务不同传播属性差异总结-创新互联
网站路径:http://myzitong.com/article/ddhspi.html