use*_*ser 6 spring transactions rollback
我无法在方法 annotated 中捕获异常@Transactional。如果save操作成功,我想向创建的用户发送邮件。
当用户名已被使用时,PostgreSQL 抛出异常PSQLException,其扩展SQLExcpetion名为Exception. 我无法捕捉Exception,PSQLException然后我尝试捕捉Throwable,这是有效的,但没有解决我的问题,并且发现捕捉Throwable是新问题的原因。
当我得到 DataIntegrityViolationException(这是 Spring 的一个异常)时,我想传播它,因为我的控制器有处理程序,它返回为这个具体异常指定的语句和状态。当我捕获 Throwable 时,我必须始终抛出 RuntimeException。
很奇怪的是,emailSender.sendEmail()即使抛出了一些异常,它也会被调用。但是如果userRepository抛出异常,则不应调用任何方法,并且应在catch语句中捕获异常,然后应回滚事务。我是否正确理解交易?
我的服务的实施:
@Transactional
public UserEntity createUser(UserEntity user) {
try {
final UserEntity saved = userRepository.save(user);
emailSender.sendEmail(saved);
return saved;
} catch (Throwable t) {
throw new RuntimeException();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 IDEA 调试此方法时,调试器不会输入 catch 语句,但我注释@RestControllerAdvice的处理程序正在捕获此异常。
知道出了什么问题,或者你知道类似的问题吗?
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |