首页 / JAVA / java – Spring:事务传播
java – Spring:事务传播
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring:事务传播,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1168字,纯文字阅读大概需要2分钟。
内容图文
![java – Spring:事务传播](/upload/InfoBanner/zyjiaocheng/789/b1edc369264f42cfa94d998214a5138b.jpg)
我有以下代码:
@Transactional
public void handle() {
for (Item item : getItems()) {
handle(item);
}
}
@Transactional(propagation = Propagation.NESTED)
public void handle(Item item) {
/* logic here */
}
假设handle()中的循环处理10个项目.还假设对于3个项目句柄(Item)将抛出异常.
我的问题:
[1]外部交易是否会在第10项之后提交?这意味着将提交7个项目的必要更改,并且其他3个项目的任何中间更改将回滚到创建的保存点?
[2]句柄(Item)中的异常会被捕获而不会被转发到handle()吗?这是由@Transactional完成的吗?
[3]另外,我想了解以下流程的行为差异:
@Transactional
public void handle() {
for (Item item : getItems()) {
handle(item);
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void handle(Item item) {
/* logic here */
}
根据我对文档的理解,这里将启动一个新事务,并且将暂停活动事务.这与NESTED不同,后者创建了一个保存点,并且仍在使用当前事务.但我相信在这里还有REQUIRES_NEW将会提交7个项目的更改,并且其他3个项目的任何中间更改都将被遗忘.
那么真正的区别是什么(如果有的话)?
解决方法:
NESTED开始主要的子交易. REQUIRES_NEW开始单独交易.
如果在方法之后使用REQUIRES_NEW标记方法,则无论外部事务发生什么,数据都保留在DB中(由单独的事务提交).
在NESTED的情况下,如果外部事务被回滚,则更改将被回滚.
见答案here
内容总结
以上是互联网集市为您收集整理的java – Spring:事务传播全部内容,希望文章能够帮你解决java – Spring:事务传播所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。