Java 使用第三方代码在Spring中处理事务

Java 使用第三方代码在Spring中处理事务,java,spring,transactions,spring-transactions,Java,Spring,Transactions,Spring Transactions,我收到第三方代码的交易问题 在服务层,我要做两个数据库插入 用我自己的代码 使用第三方代码(调用转到第三方代码的服务层) 我解释代码如下 @Transactional(rollbackFor = Exception.class) public class InvoiceserviceImpl implements Invoiceservice{ @Override public void processinvoice() { // 1. Data base in

我收到第三方代码的交易问题

在服务层,我要做两个数据库插入

  • 用我自己的代码
  • 使用第三方代码(调用转到第三方代码的服务层)
  • 我解释代码如下

    @Transactional(rollbackFor = Exception.class)
    public class InvoiceserviceImpl implements Invoiceservice{
    
        @Override
        public void processinvoice() {
            // 1. Data base inserting logic via DAO Layer
    
            // 2. Data base insertion logic via another service (code is third party in the form of JAR) 
    
            // 3. some more logic
        }
    }
    
    正如您所看到的,类是事务性的

    processinvoice方法有三层,数据库插入到自己的代码中,数据库插入到第三方代码中,最后一层更具逻辑性


    现在我面临的问题是,如果在第三部分中发生任何异常,回滚将针对1号数据库调用,而不是2号数据库调用(这是第三方代码)

    什么是“第三方代码”事务传播策略?如果代码创建自己的独立事务,您会看到类似的情况。事实上,如果第三方代码不知道Spring的事务上下文,它将无法加入现有事务。@Kayaman,它可以,例如,如果您可以告诉它应该使用
    传播。REQUIRES
    而不是
    传播。REQUIRES\u NEW
    。有两个策略值支持继续现有事务。@M.Prokhorov不适用于不了解Spring事务上下文的代码,即如果第三方代码不“Spring感知”。在带有
    @Transactional
    注释的方法内调用非托管代码不会使非托管代码具有事务性。如果不知道第三方代码是如何访问数据库和/或管理事务的,则没有任何答案可以帮助您找到解决方案。