异常类 |
父类 |
说明 |
类型 |
ReflectiveOperationException |
Exception |
检查性异常父类 |
检查性异常 |
ClassNotFoundException |
ReflectiveOperationException |
找不到类信息 |
检查性异常 |
IllegalAccessException |
ReflectiveOperationException |
反射操作相关的异常。 由于反射的特殊性,类、方法、属性均使用String作为名称进行操作 |
检查性异常 |
InstantiationException |
ReflectiveOperationException |
实例化异常。该异常继承于ReflectiveOperationException。 当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常 |
检查性异常 |
InvocationTargetException |
ReflectiveOperationException |
调用method.invoke() 反射异常 |
检查性异常 |
NoSuchFieldException |
ReflectiveOperationException |
字段未找到异常 |
检查性异常 |
NoSuchMethodException |
ReflectiveOperationException |
方法未找到异常 |
检查性异常 |
ReflectiveOperationException |
ReflectiveOperationException |
反射操作异常 |
检查性异常 |
异常类 |
父类 |
说明 |
类型 |
NullPointException |
Exception |
检查性异常父类 |
运行时异常 |
spring事务传播类型
事务传播行为类型 |
说明 |
PROPAGATION_REQUIRED |
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
|
PROPAGATION_SUPPORTS |
支持当前事务,如果当前没有事务,就以非事务方式执行。 |
PROPAGATION_MANDATORY |
使用当前的事务,如果当前没有事务,就抛出异常。 |
PROPAGATION_REQUIRES_NEW |
新建事务,如果当前存在事务,把当前事务挂起。 |
PROPAGATION_NOT_SUPPORTED |
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
PROPAGATION_NEVER |
以非事务方式执行,如果当前存在事务,则抛出异常。 |
PROPAGATION_NESTED |
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
事务和异常关系
事务 |
异常类型 |
异常处理 | 是否回滚 |
代码示例 |
有事务
|
检查性异常 |
抛出事务中不指定异常类 |
N |
@Transactional public void saveAndCheckedException(UserInfo userInfo) throws ClassNotFoundException { String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); Class.forName("com.jdbc.driver.MysqlDriver11");//测试异常 }
|
|
检查性异常 |
抛出在事务中指定异常类 |
Y |
@Transactional(rollbackFor = ClassNotFoundException.class) public void saveAndCheckedException1(UserInfo userInfo) throws ClassNotFoundException { String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); Class.forName("com.jdbc.driver.MysqlDriver11");//测试异常 } |
|
检查性异常 |
抛出在事务中指定别的异常类 |
N |
@Transactional(rollbackFor = NullPointerException.class) public void saveAndCheckedException2(UserInfo userInfo) throws ClassNotFoundException { String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); Class.forName("com.jdbc.driver.MysqlDriver11");//测试异常 } |
|
检查性异常 |
抛出在事务中指定该异常的父类 |
Y |
@Transactional(rollbackFor = ReflectiveOperationException.class) public void saveAndCheckedException3(UserInfo userInfo) throws ClassNotFoundException { String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); Class.forName("com.jdbc.driver.MysqlDriver11");//测试异常 }
|
|
检查性异常 |
捕捉异常 |
N |
@Transactional public void saveAndCheckedException4(UserInfo userInfo) { String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); try { Class.forName("com.jdbc.driver.MysqlDriver11");//测试异常 } catch (ClassNotFoundException e) { e.printStackTrace(); } } |
|
运行时异常 |
抛出并且不指定异常类 |
Y |
/** * 运行时异常 事务回滚! * @param userInfo */ @Transactional public void saveAndUnChecked(UserInfo userInfo){ String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); //空指针异常 UserInfo userInfo1=null; userInfo1.getName(); } |
|
运行时异常 |
捕捉异常 |
N |
/** * try 事务不回滚 * @param userInfo */ @Transactional public void saveAndUnChecked1(UserInfo userInfo){ String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); try { //空指针异常 UserInfo userInfo1 = null; userInfo1.getName(); }catch (NullPointerException e){ e.printStackTrace(); } } |
|
运行时异常 |
抛出异常 |
Y |
/** * 抛出但是不指定对应回滚异常类 事务回滚 * @param userInfo */ @Transactional public void saveAndUnChecked2(UserInfo userInfo) throws NullPointerException{ String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); //空指针异常 UserInfo userInfo1 = null; userInfo1.getName(); }
|
|
运行时异常 |
抛出异常并在事务中声明其它运行时异常 |
Y |
/** * 抛出并指定回滚异常类(类不同),并throw 可能的异常 事务回滚 * @param userInfo */ @Transactional(rollbackFor = ArithmeticException.class)//算数运算异常 public void saveAndUnChecked3(UserInfo userInfo) throws NullPointerException{ String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); //空指针异常 UserInfo userInfo1 = null; userInfo1.getName(); } |
|
运行时异常 |
不抛出可能异常,在事务中指定其它异常 |
Y |
/** * 抛出并指定回滚异常类(类不同),不throw 可能的异常 事务回滚 * @param userInfo */ @Transactional(rollbackFor = ArithmeticException.class)//算数运算异常 public void saveAndUnChecked4(UserInfo userInfo) { String sql="insert into tb_user_info (`user_name`) values('"+userInfo.getName()+"')"; jdbcTemplate.execute(sql); //空指针异常 UserInfo userInfo1 = null; userInfo1.getName(); }
|