【问题标题】:Transaction management in Spring: Does support come from Spring or container?Spring 中的事务管理:支持来自 Spring 还是容器?
【发布时间】:2018-01-27 18:18:43
【问题描述】:

我正在尝试了解Spring中的事务管理,但我有一些疑问。

我在EJB world 中读到了一些关于事务管理的内容,可以是CMTBMT。对于CMT,根据文档,管理事务的是Application server(例如JBOSS)。

现在,进入 Spring 事务管理,并考虑仅使用 Web container (Apache Tomcat),这是如何工作的?

Spring 是否有自己的事务管理,能够处理 local transactionglobal transaction(与 2 阶段提交一起使用)。实际支持需要来自底层container(本例为Apache tomcat)还是来自框架的支持就足够了?

我不清楚所有这些部分是如何组合在一起的。

谁能帮我理解这个?

【问题讨论】:

    标签: spring transactions spring-transactions


    【解决方案1】:

    Spring 本身不包含任何类型的事务功能,它只提供连接到容器或独立库提供的事务功能的方法。

    如果您在 Tomcat 上运行应用程序并且不提供任何事务管理器库(如 bitronix),那么您只能获得 servlet 容器提供的本地 jdbc 事务。

    当您阅读 https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html 的要点时,请注意它说 Spring 正在提供抽象,这意味着它通过自己的 api 提供访问并使用 aop 使事务成为非侵入式的,但不提供任何事务功能的实现。它有助于将东西粘合在一起,这是弹簧所做的主要事情。

    【讨论】:

    • 感谢您的回复,我比以往任何时候都更加困惑。 Spring中有spring-tx模块;所以这只是实际“提供者”之上的一个包装器,负责事务管理。这是使事情变得混乱的事情。如果我理解 Spring 框架本身没有任何事务能力,那么这是否意味着“插入”其他提供者并使用充当包装器的 spring-tx 模块?能否请您详细说明一下?
    • 再次感谢您的回复,很有道理。
    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2015-04-24
    • 2015-07-16
    相关资源
    最近更新 更多