【问题标题】:Spring Transaction Management schemes - AOP and @TransactionalSpring 事务管理方案 - AOP 和 @Transactional
【发布时间】:2014-11-30 10:03:28
【问题描述】:

好吧,我可能在这个问题上错了,但我需要您的宝贵意见/建议才能站在正确的道路上。

我想知道Spring+Hibernate和@中处理事务管理的更好最佳方式987654323@ + JDBCTemplate 各有优劣。

我知道可以这样做的一些方案/方法是:

1) Spring Transaction Management using AOP Annotations@Aspect, @PointCut with Advice like @Before, @After, @Around etc)。

问题 - 1:我之前使用 Spring AOP 完成了一个 Logging 示例,但我不知道如何为事务管理做同样的事情。事务开始、回滚和提交是否将在该 Aspect 类中使用 @Before@After@Around 之类的建议完成?请为此分享一些代码示例/sn-p。

问题 - 2:这种方法是否需要 Hibernate Transaction Manager 强烈要求,或者不需要它也可以实现?

2) Spring Transaction Manager with @Transactional Annotation :另一个涉及 Hibernate Transaction Manager 的事务管理方案,用于使用 @Transactional Annotation 进行声明式事务管理。

问题 - 3:在方法上使用@Transactional注解可以保证该方法体中的所有事务管理,但是您将如何在 Multi-DAO 操作中以这种方式管理回滚功能该特定方法中的不同实体?说,您在该方法中执行 3-4 次不同的 DAO 操作(在具有 @Transactional 的不同 DAO 方法上),并且在第 3 次 DAO 操作时发生一些异常,您将如何回滚。

请分享您的观点!

问候,

阿伦

【问题讨论】:

  • 为什么要重新发明轮子并尝试实现自己的事务管理?所以恕我直言选项1不是一个选项。要将 Spring 与事务一起使用,您需要一个 PlatformTransactionManager 实现,具体使用取决于您使用哪种持久性机制,或者您是否需要使用 JTA。您的事务边界应该是服务层而不是单个 dao 方法(如果您使用后者,您将有多个事务而不是一个)。
  • @M. Deinum:这是否意味着没有像带有AOP注释的事务管理:@Before@After或者以这种方式使用它们不是正确的选择?
  • 你最好的选择确实是带有@Transactional注解的Spring Transaction Manager。如果你从另一个 DAO 调用 DAO,它们都是事务性的,原子性没有问题,整个事务是原子的,所有调用都会回滚
  • 事务管理是使用 AOP 完成的,但是如果 spring 已经提供了一个经过良好测试和使用的,为什么你还要自己动手呢?

标签: spring hibernate transactions aop spring-aop


【解决方案1】:

认为您应该使用选项 2(例如 Spring 事务管理的东西),因为它已经实现并经过测试:)。关于“问题 3”:这取决于您为所有“事务性”DAO API 选择的传播策略。请检查此 javadoc @Transactional 和“传播”部分。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2011-10-18
    • 2015-02-26
    • 1970-01-01
    • 2020-12-18
    • 2018-03-28
    相关资源
    最近更新 更多