参考:https://blog.csdn.net/weixin_34929338/article/details/80285108
https://www.oschina.net/question/2491333_2278150?p=1
手动回滚
https://blog.csdn.net/weixin_42324471/article/details/99969418
疑问
什么时候抛出,
什么时候捕获
*,非运行时异常,是否需要手动抛出?不抛出,后面可以捕获到吗?
*,业务逻辑层抛出业务异常时,Exception也需要抛出吗,不然后面可以捕获吗
*,如果统一异常处理,是不是业务逻辑层异常抛出,controller也抛出业务和Exception异常
如果不使用统一异常处理,在controller层捕获异常即可
关于日志
不管controller捕获还是统一异常捕获,如果不打印异常,是不是生产服务器不会打印异常?
关于事务
1,业务分为多个方法时,怎么把几个操作放到一个事务中,方法上加
@Transactional(rollbackFor = Exception.class)每个方法需要抛出异常Exception吗,不抛出的话,数据库是否会回滚
2,怎么实现事务隔离,该方法不加注解,是否可以实现
3,spring 事务加try catch就不回滚, @Transactional加上(rollbackFor = { Exception.class }) ,下面catch里面还需要手动回滚或抛运行异常了吗?
1、》你要在try catch里throw那个异常,如果不抛,事务根本不会回滚
2、》@Transactional标签默认会对RuntimeException异常进行回滚,如果你抛出的异常不是继承自RuntimeException,那需要你指定回滚的异常是什么异常,也就是你写的 rollbackFor = { Exception.class }
3、》多个方法加事务,前面的方法执行完之后不久commit了吗,应该是加注解的方法放到一个事务中,最终的方法执行完决定
commit或者rollback
4,通常的处理方式是什么,如果在类上加@Transational(robackFor={Exception.class}),是不是就可以解决,具体业务方法不用抛出异常。