Spring事务的@Transactional和try/catch

首先,我们必须知道,默认spring事务只在发生未被捕获的 runtimeexcetpion时才会被spring aop异常捕获从而 回滚

try…catch就是捕获异常,然后处理掉,事务是不会回滚的;

@transactional 是要在系统抛异常的时候才能起到事务回滚的作用;

@Transactional(rollbackFor = Exception.class)
@Override
public Integer updateRecordOrdeNo(User user) {
	Integer flag = 0;
	try{
	   	 flag  = userMapper.save(user); // 表操作
    	//出现异常
    	1/0;
	} catch (Exception e) {
    	logger.info("异常:"+e);
   	}
}
//此时return语句能够执行
	return  flag;
}

此时,事务是不会回滚的

解决try…catch事务回滚问题

###方法一:设置手动回滚
org.springframework.transaction.interceptor包下的类
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();

@Transactional(rollbackFor = Exception.class)
@Override
public Integer updateRecordOrdeNo(User user) {
	Integer flag = 0;
	try{
	   	 flag  = userMapper.save(user);
    	//出现异常
    	1/0;
	} catch (Exception e) {
    	logger.info("异常:"+e);
    	//设置手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
   	}
}
//此时return语句能够执行
	return  flag;
}

方法二:catch中抛出运行时异常

把异常抛出,就会被spring aop异常捕获到。

@Transactional(rollbackFor = Exception.class)
@Override
public Integer updateRecordOrdeNo(User user) {
	Integer flag = 0;
	try{
	   	 flag  = userMapper.save(user);
    	//出现异常
    	1/0;
	} catch (Exception e) {
    	logger.info("异常:"+e);
    	//catch中抛出运行时异常
		throw new RuntimeException(); 
   	}
}
//此时return语句能够执行
	return  flag;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: try-catch是一种异常处理机制,用于捕获和处理程序中的异常。当程序执行过程中出现异常时,try-catch会捕获异常并执行相应的处理代码,以避免程序崩溃。 @TransactionalSpring框架中的一个注解,用于控制事务的提交和回滚。当一个方法被标记为@Transactional时,Spring会在方法执行前开启一个事务,在方法执行后根据方法执行的结果决定是否提交或回滚事务。这样可以确保数据的一致性和完整性。 ### 回答2: try-catch是一种用于捕获和处理异常的代码结构。在程序中,我们无法预测所有的可能异常情况,因此需要使用try-catch来捕获这些异常,以确保程序的正常运行。 try-catch块由两个部分组成:try块和catch块。try块中包含可能会出现异常的代码,当try块中的代码产生异常时,程序会立即跳转到相应的catch块来处理异常。catch块中可以定义异常的类型,以便选择性地捕获和处理特定类型的异常。通过使用try-catch,我们可以更好地控制和管理异常,避免程序因异常而崩溃或出现不可预期的结果。 @TransactionalSpring框架中的一个注解,用于标记方法或类的事务行为。事务是指一系列的数据库操作,这些操作要么全部成功,要么全部失败回滚。而@Transactional注解的作用就是确保方法或类中的所有数据库操作在一个事务中执行。 使用@Transactional注解可以方便地管理事务的开启、提交和回滚。当我们在方法或类上标记@Transactional注解后,Spring框架会在方法开始前开启一个数据库事务,当方法执行完成后,如果没有出现异常,则事务会被提交,若出现异常,则事务会被回滚。这样可以保证整个方法或类中的数据库操作的一致性。 同时,@Transactional注解也可以配置一些属性,如事务的隔离级别、事务的传播行为等,以实现更细粒度的事务管理。通过使用@Transactional注解,我们能够简化事务管理的代码,提高代码的可读性和可维护性。 ### 回答3: try-catch和@Transactional都是Java编程中常用的关键字和注解。它们有不同的功能和用途。 try-catchJava中异常处理机制的一部分。当我们在代码中使用try-catch块时,我们可以将可能引发异常的代码放在try块中,然后在catch块中处理异常。这样可以保证程序的正常运行并避免不可控的错误导致程序崩溃。通过捕捉异常,我们可以根据不同的异常类型执行相应的处理逻辑,例如输出错误信息、记录日志、重新抛出异常等等。使用try-catch可以提高程序的可靠性和稳定性。 @TransactionalSpring框架中的注解之一,用于标记事务边界。事务是一组操作,要么都成功,要么都失败。使用@Transactional注解可以将一段代码标记为一个事务,这样在执行这段代码时,会自动启动一个事务,并在代码执行完成后根据执行结果决定是提交事务还是回滚事务。如果成功执行,则提交事务;如果发生异常或错误,则回滚事务。通过使用@Transactional,可以保证数据库操作的一致性和完整性。 try-catch和@Transactional是在不同层面上起作用的。try-catch主要用于代码级别的异常处理,用来处理和处理异常;而@Transactional主要用于事务管理,用来保证操作数据库时的一致性。 总而言之,try-catch和@TransactionalJava编程中两个重要的关键字和注解。try-catch用于处理代码级别的异常,保证程序的正常运行;@Transactional用于标记事务边界,保证数据库操作的一致性。在实际开发中,我们可以通过合理使用try-catch和@Transactional来提升代码的健壮性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LC超人在良家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值