Spring boot 当Advice开始执行时,事务不提交

Spring boot 当Advice开始执行时,事务不提交,spring-boot,spring-data-jpa,spring-aop,Spring Boot,Spring Data Jpa,Spring Aop,我正在写一个方面,将发送电子邮件保存/更新/删除操作与旧的和更新的数据作为电子邮件信息。我正在使用由springbootstarter数据jpa依赖项提供的JpaRepository。 我正在这些操作中使用@Transactional!我希望在提交交易后调用我为电子邮件编写的aspect。但它不是这样工作的。方面也在事务边界内执行 以下是方面 import org.aspectj.lang.ProceedingJoinPoint; 导入org.aspectj.lang.annotation.Ar

我正在写一个方面,将发送电子邮件保存/更新/删除操作与旧的和更新的数据作为电子邮件信息。我正在使用由
springbootstarter数据jpa
依赖项提供的
JpaRepository
。 我正在这些操作中使用
@Transactional
!我希望在提交交易后调用我为电子邮件编写的aspect。但它不是这样工作的。方面也在事务边界内执行

以下是方面

import org.aspectj.lang.ProceedingJoinPoint;
导入org.aspectj.lang.annotation.Around;
导入org.aspectj.lang.annotation.Aspect;
导入org.springframework.stereotype.Component;
@面貌
@组成部分
公共类电子邮件方面{
私人邮件发送者;
公共EmailAspect(EmailSender EmailSender){
this.emailSender=emailSender;
}
@大约(“执行(*com.company.app.service.*Repository.save*(..)”)
public void sendmail(ProceedingJoinPoint joinPoint)抛出可丢弃{
对象myCustomObject=joinPoint.continue();
emailSender.send(“从应用程序测试-主题”,“从应用程序测试-正文”test@test.com");
}
}

请仔细阅读这两个SO问题及其答案,如果您想坚持使用Spring AOP,这两个想法可能是一个很好的选择:(1)在之后尝试
(运行时不考虑您的方法引发的可能异常)或在返回后
(仅在相应的方法正常返回时运行)建议而不是周围的
@
。我还没有用
@Transactional
测试过这一点,但它很有可能奏效。(2) 如果所有其他操作都失败,您仍然可以在单独的线程中发送电子邮件,以避免不必要地拖累事务。如果这个评论有帮助,请让我知道,我会把它转换成一个答案。两个人试图帮助你,但没有反馈。请礼貌地回答,这样我们都知道是否有人应该写一个你可以接受的答案来结束问题,或者是否有任何后续问题。非常感谢你。@kriegaex。谢谢你对这个问题的回答。我会很快更新。