最近遇到这样的问题,使用spring时,在业务层需要捕获异常(特殊需要),当然一般情况下不需要这样做的。具体如下:
在ServiceA类中有method1,在该方法中调用另一个ServiceB类的method2方法时(假定该方法抛出异常),
method1方法捕获该异常但是没有向上抛出。spring提示:org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
以下是ServiceA的示例代码
@Transactional(rollbackFor = Throwable.class)//默认事务传播方式required
public class ServiceA {
@Autowired
private Dao dao;
@Autowired
private ServiceB serviceB;// 注入另一Service Bean
public void method1() {
dao.insert(vo); // 保存ServiceA的vo对象
try {
serviceB.method2(vo); // 保存ServiceB的vo对象
} catch (CustomException e) {
//如果方法method2错误,则不做任何处理,即方法method2失败与成功都不影响method1运行
// 捕获自定义异常