请问Spring事务管理工作与Spring WebFlux?

user3303372:

春天在什么对RDBMS事务管理工作也春季WebFlux支持?

例如,假设正确配置,将一个方法注释与@Transactional标注使用Spring的事务管理器,如果发生错误回滚事务?

如果交易管理不工作,必须在@Transactional实际的方法throw和异常,或者必须MonoFlux返回类型发出错误信号?

我知道JDBC固有阻断,并且因此任何JDBC操作必须从阻塞到反应性的,或反之亦然来桥接。

Spring的事务管理器的工作原理是使用ThreadLocal它我假设不会在反应器环境的工作,因为反应堆是节俭线程和单线程可以换出一个工作单元另一个,而首先是等待(右?)在I / O。我知道反应器将Context其在概念上类似于对象ThreadLocal(是吗?),但我还没有看到提到交易利用了它的任何文件。此外,在一个事务中发生的所有JDBC操作必须使用相同的Connection,这可能是艰难的反应方面的事情。

我的组织有WebFlux和卡桑德拉经验,但卡桑德拉有本地司机反应。

谢谢!

利维乌·回肠:

AFAIK春天标准事务管理不WebFlux工作。

使用@Transactional不会工作,因为当一个注解的方法被调用时,交易机制将节省内部事务的状态ThreadLocal调用线程的。正如你自己已经说了,这是行不通的。它块和它共享状态。

但是,您可以使用.runOn(Schedulers.parallel()),以阻断代码发送到另一个线程。这样你就可以有可阻塞线程,您可以配置为具有相同的大小,你的数据库连接池线程池。

但即便如此仍不能依靠@Transactional,因为方式的胎面池中重用线程。在一个标准的Servlet架构你必须每个HTTP请求一个线程。当发回响应,线程停止,它关闭了交易。在这种情况下,虽然,反应堆调度不关闭线程和重用他们的其他活动。所以,即使你可以阻止你仍然有同样的问题之前。

你有Context你所提到的选项,我认为这将为其工作Mono我不知道这是否会为一个工作Flux(我在想,在流量份额所有事件同样的背景下,这是你不想要的东西)。

另一种选择是使用Touple2与T1作为业务对象和T2事务上下文。因为你有技术性的东西混合业务逻辑和它overcomplicates东西我不建议这虽然。

我最好的选择将是你自己做交易/连接管理:

  1. 获取数据库连接
  2. 打开TX
  3. 不要阻塞IO的东西
  4. 关闭TX
  5. 关闭/释放DB连接

所有在上的阻塞线程一个码块。

这将是更安全(无泄漏),更容易理解。也正因为你基本上做自己的一切,你可以选择什么样的错误处理方式最适合您的方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

Spring Batch事务管理如何工作?

来自分类Dev

Spring WebFlux / Reactor核心

来自分类Dev

Java Spring WebFlux与RxJava

来自分类Java

Spring Webflux,测试`ServerResponse`

来自分类Java

Spring WebFlux和WebSocket

来自分类Dev

Spring Webflux中的flatMap()与subscribe()

来自分类Java

在Spring 5中缓存WebFlux

来自分类Dev

Spring Webflux非阻塞响应

来自分类Java

Spring WebFlux WebClient:延迟执行

来自分类Dev

在Spring Webflux中捕获响应

来自分类Java

Spring Webflux返回404(Not Foud)

来自分类Dev

Spring WebFlux认证的WebSocket连接

来自分类Dev

Spring Webflux + LDAP / Kerberos安全

来自分类Java

Spring Webflux与Vert.x

来自分类Dev

Spring WebFlux WebClient处理ConnectTimeoutException

来自分类Dev

抛出异常Spring Boot Webflux

来自分类Java

jOOQ和Spring事务管理

来自分类Java

多线程中的Spring事务管理?

来自分类Java

Spring Jdbc 4事务管理

来自分类Java

Spring数据JPA和事务管理

来自分类Java

使用spring @Transactional的Spring Boot可以在不启用事务管理的情况下工作

来自分类Java

Spring的事务管理:支持来自Spring还是容器?

来自分类Dev

Spring Boot和Spring Data JPA中的事务管理

来自分类Java

Spring Framework WebFlux反应式编程

来自分类Java

Spring Webflux非阻塞依赖资源调用

来自分类Java

Spring WebFlux没有流式响应

来自分类Java

Spring Integration WebFlux错误处理

来自分类Java

带有查询参数的Spring Webflux WebTestClient

来自分类Dev

从未调用Spring Integration WebFlux.outboundGateway

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  3. 3

    OpenJDK的和AdoptOpenJDK的区别

  4. 4

    如何解决npm问题?

  5. 5

    GitHub文件夹上有一个白色箭头

  6. 6

    在python中交互式旋转3D图-Matplotlib-Jupyter Notebook

  7. 7

    在熊猫中每隔一列取行平均值(python)

  8. 8

    未定义:grpc.SupportPackageIsVersion7 grpc.ServiceRegistrar

  9. 9

    TypeScript泛型错误:算术运算的左侧必须为“ any”,“ number”,“ bigint”类型

  10. 10

    无法导入大猩猩/mux(github.com/gorilla/[email protected]:在go.mod中明确要求,但在vendor / modules.txt中未标记为明确)

  11. 11

    tensorflow:仅在可用val_acc的情况下可以保存最佳模型,跳过

  12. 12

    使用moment.js获取不同时区的当前时间

  13. 13

    Nuxt.JS:如何在页面中获取路由URL参数

  14. 14

    如何在k8s中连接到我的mysql pod或mysql的节点?

  15. 15

    java.lang.NoClassDefFoundError:无法初始化类org.bytedeco.javacpp.avutil

  16. 16

    重命名由android 10中的应用程序创建的Mediastore的文件。正在使用Android API 30,但在API 29中显示错误

  17. 17

    Golang time.Parse()得到0001-01-01 00:00:00 +0000 UTC

  18. 18

    “无法上传。请重试。” Google Play控制台上的错误

  19. 19

    requestLegacyExternalStorage在Android 11中不起作用-API 30

  20. 20

    TypeScript TS7015:元素隐式地具有“ any”类型,因为索引表达式不是“ number”类型

  21. 21

    如何处理这个git警告?“不建议在不指定如何协调分歧分支的情况下进行拉动”

热门标签

归档