Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @在返回切入点方法的同一事务中执行方面之后?_Java_Spring_Hibernate_Transactions_Aspect - Fatal编程技术网

Java @在返回切入点方法的同一事务中执行方面之后?

Java @在返回切入点方法的同一事务中执行方面之后?,java,spring,hibernate,transactions,aspect,Java,Spring,Hibernate,Transactions,Aspect,我有一个要求在执行一个函数后执行一个任务。我已经为此使用了Aspect。但我有些困惑 我在spring服务中有一个函数a() @Transactional(readOnly = false, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) void A()

我有一个要求在执行一个函数后执行一个任务。我已经为此使用了Aspect。但我有些困惑

我在spring服务中有一个函数a()

@Transactional(readOnly = false,
               isolation = Isolation.DEFAULT,
               propagation = Propagation.REQUIRED,
               rollbackFor = {Exception.class})
void A() {
 //Do Something
}
在返回此函数的特性后,我有一个
@

 @AfterReturning(pointcut = "execution(Sevice.saverecord(..)) ")
 public void processNotifications(JoinPoint jp) {}
我想知道这个方面是使用metod A()的事务,还是自动创建一个新事务。因为我没有在这个方面方法上定义任何事务

我尝试在这两种方法中使用TransactionSpectSupport.currentTransactionStatus().toString()打印事务详细信息。我得到了两个不同的ID


有人能解释一下这是否意味着有两个事务,如果是,第二个事务来自哪里?

返回后的
@AfterReturning
方面在与建议方法相同的事务中执行

调用事务方法时的执行顺序如下图所示(ref-spring)

特性(即定制顾问)可以配置为在事务通知之前或之后运行,默认情况下,事务通知在事务通知之后运行


有关如何将自定义advisor配置为在事务通知之前运行的进一步参考,请使用所述的。

感谢您的解释。只是有另一个疑问。如果我在afterReturning()函数上使用new transaction(REQUIRES_new),它不会启动新事务,而是选择旧事务。是的,这是预期的,因为通知和目标方法包含在同一事务中,它将继续使用现有事务,即旧事务。您可以探索您的场景。我正在应用程序中使用JpaTransactionManager,此transactionManager不支持嵌套传播。我得到了以下错误:org.springframework.transaction.NestedTransactionNotSupportedException:JpaDialect不支持保存点-检查您的JPA提供程序的功能。这里是否有其他替代方案可用于实现类似“每当db层发生任何异常时,回滚应仅发生在特定保存点上。您应切换到以支持保存点更正回滚将在所述场景中发生;最好切换到
DataSourceTransactionManager