Java 删除/忽略当前事务并使用即将到来的事务(如果可用)

Java 删除/忽略当前事务并使用即将到来的事务(如果可用),java,spring,transactions,Java,Spring,Transactions,我有3个方法,定义如下methodX和methodY在不同的类中定义methodY和MethodsAsync在同一类中定义 @Transactional(propagation = Propagation.REQUIRED) public void methodX(){ ..... methodY(); methodZAsync(); // } @Transactional(propagation = Propagation.REQUIRED) public void

我有3个方法,定义如下
methodX
methodY
在不同的类中定义
methodY
MethodsAsync
在同一类中定义

@Transactional(propagation = Propagation.REQUIRED)
public void methodX(){
    .....
    methodY();
    methodZAsync(); //
}


@Transactional(propagation = Propagation.REQUIRED)
public void methodY(){
    .....
    someDatabaseOperations();
    .....
}


@Async
public void methodZAsync(){
    .....
    pollingBasedOnDataOperationsOfMethodY();
    .....
}
这里的问题是,MethodsAsync需要提交
methodY()
的数据库操作,然后才能开始工作。这会失败,因为
methodZAsync
在不同的线程中运行

一个选项是使
methodY
的事务使用
@Transactional(propagation=propagation.REQUIRES\u NEW)
。但是由于
methodY
在不同用例的多个地方使用,我不允许这样做

我已经检查过了,但是
TransactionSynchronization
是一个接口,我不确定如何处理其余未实现的方法

所以我想,与其在
methodY()
中进行更改,不如让
methodX()
告诉
methodY()
使用一个新事务(天真的方式:关闭当前正在运行的事务),它会帮我解决问题


这是否可以从
methodX()
执行,而无需修改
methodY()

参考spring boot,还有

@事务性(传播=传播。需要\u新建)


方法都有经过。希望您能得到正确的答案

您可以围绕methodY()创建一个新的包装器方法来创建一个新事务。然后您可以从methodX()调用这个新方法,而不影响任何其他用例

@Transactional(propagation = Propagation.REQUIRED)
public void methodX(){
    .....
    methodYInNewTxn();
    methodZAsync(); //
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodYInNewTxn() {
    methodY();
}

@Transactional(propagation = Propagation.REQUIRED)
public void methodY(){
    .....
    someDatabaseOperations();
    .....
}