如果抛出异常,@ Transaction不起作用

时间:2018-03-20 07:21:01

标签: java mysql spring jpa spring-boot

这是我的春季启动应用程序:

@SpringBootApplication
@EnableTransactionManagement(proxyTargetClass=true) 
public class WhizhopApplication {

public static void main(String[] args) {

    SpringApplication.run(WhizhopApplication.class, args);
 }
}

这是我的服务:

@Service
public class OrderService {
  @Autowired
   BillRepository billRepo;

    @Transactional(rollbackFor = Exception.class)
    public BaseDTO saveKot(BillDTO billDto) {
     try{
      //bussiness logic
       billRepo.save();
     }catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

    }
   }
}

如果发生任何异常,则不会回滚事务。

3 个答案:

答案 0 :(得分:1)

如果您希望使用@Transactional处理异常,则不应该捕获异常。

另请注意:

  1. @Transactional仅适用于公共方法
  2. Spring’s @Transactional does not rollback on checked exceptions

答案 1 :(得分:0)

将业务逻辑提取到由while (i in nrow(DT)) { if(DT$var[i]>value){ DT_aux[i]=DT[i] i<-i+1 } } Error in if (DT$value[i] > 45) { : argument is of length zero 注释的单独方法中,并从@Transactional(rollbackFor = Exception.class)中删除注释。

saveKot

答案 2 :(得分:0)

默认情况下,只有Runtime execption才会从@Transactional回滚,如果要更改此行为,可以将rollBackFor参数添加到注释中

@Transactional(的rollbackFor = {MyException.class})