【问题标题】:Spring AOP transaction management for service layer服务层的 Spring AOP 事务管理
【发布时间】:2015-04-21 13:36:48
【问题描述】:

我参考了 URL 中所述的示例,即在服务层中的所有方法上应用 spring aop 事务,但这也将对像 SELECT 这样的只读方法应用事务管理。

如果我对 readOnly 事务应用事务管理,会有什么不利影响吗?

<aop:config>
<aop:advisor pointcut="execution(* com.xyz.someapp.service.*.*(..)))"
advice-ref="transactionAdvice" />
</aop:config>

http://www.studytrails.com/frameworks/spring/spring-declarative-transactions.jsp

我还有一个问题。如果我有调用 billingService.create() 的 orderService.create(),将如何应用事务隔离?

【问题讨论】:

    标签: spring transactions spring-aop


    【解决方案1】:

    您通常希望将事务用于只读操作,因为事务将为您提供一致的数据视图。如果您跳过事务,您可能会看到来自其他不完整事务的部分更新。

    【讨论】:

      【解决方案2】:

      我认为不会有任何不利影响,因为事务只是定义了一组原子操作。如果事务失败,则将执行回滚,但只读操作不会以任何方式影响数据库。 我能想到的唯一大缺点与性能有关。底层数据库的锁定策略(表或行是否被锁定)决定了您的隔离级别。根据您的锁定策略,在事务期间应用了某种隔离。例如,当您写入数据库时​​,您的隔离级别决定了并行读取是否可以看到正在进行的更改(导致例如脏读、不可重复读取等),或者这些更改是否必须在它们之前提交变得对其他人可见。 因此,您将锁定您只想读取的资源,这可能会导致高可用性应用程序的性能过大。总结:除了引起性能问题外,它没有不良影响。

      解决您的第二个问题:这取决于您如何管理交易。我猜在这种情况下,两个服务方法都需要事务,所以我认为默认行为是第一个服务调用的事务由第二个服务方法调用继承(这称为“事务传播”)。这是必需的,因为不允许嵌套事务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多