【问题标题】:Transaction configuration for Spring Java configured contextSpring Java 配置上下文的事务配置
【发布时间】:2011-05-07 13:39:02
【问题描述】:

我已经为此苦苦挣扎了几个小时。

我正在尝试将我的 Spring XML 配置迁移到基于 Java 的完整配置。

我使用AnnotationConfigApplicationContext 作为上下文实现。

我无法从我的旧 XML 配置中找到该行的 Java 等效项:

<tx:annotation-driven transaction-manager="transactionManager" />

因此,Spring 不管理事务。

在我的 Java 配置中,我已经为事务初始化了相关的 bean:会话工厂、事务管理器等,但是如果没有该行,则不使用事务代理,因此实际上没有事务到位。

所以我的问题是如何将该行转换为我的 Java 上下文配置,或者如何以另一种方式解决问题。

感谢任何帮助。 谢谢。

【问题讨论】:

    标签: java spring transactions annotations spring-aop


    【解决方案1】:

    看看https://spring.io/blog/2011/02/17/spring-3-1-m1-introducing-featurespecification-support。 Spring 3.1 的 FeatureSpecification 类(例如 TxAnnotationDriven)旨在完全解决上述问题。

    【讨论】:

    • 浏览链接时出现404响应,伙计
    【解决方案2】:

    您现在可以使用@EnableTransactionManagement。

    见:http://blog.springsource.com/2011/06/10/spring-3-1-m2-configuration-enhancements/

    【讨论】:

    • 这里如何指定使用哪个事务管理器?例如 DataSourceTransactionManager
    【解决方案3】:

    根据我的经验,用@Bean-style 配置完全替换 XML 配置是不切实际的。在 java 中配置某些东西确实更有意义,特别是您自己的 bean 定义。但是对于像&lt;tx:annotation-driven&gt; 这样的基础设施类型声明,XML 语法要简洁得多。

    可以在纯 java 中重现相同的效果,但最终会变得繁琐且不直观,因为像 &lt;tx:annotation-driven&gt; 这样的东西通常是复杂的低级 Spring 基础结构类的交互,而您确实不需要不想碰。

    我的建议 - 混合搭配,使用 Java 和 XML 各自的优势。这很容易做到。我更喜欢保留普通的 XML ApplicationContext 类,然后将我的 @Configuration 类声明为该 XML 上下文中的 bean,以及诸如 &lt;tx:annotation-driven&gt; 之类的东西。

    【讨论】:

    • 不,我不这么认为。与 Spring 3 相比,现代 Spring 版本中的注释样式要丰富得多。
    • 感谢您的更新。这就是我所怀疑的。我们正在尝试将我们的遗留代码更新到 Spring 4,作为该过程的一部分,我希望尽可能多地消除我们的 XML 配置(当然,只要它有意义,但我觉得在大多数地方基于注释的方法是更好的选择)。
    猜你喜欢
    • 2011-10-08
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多