I. Visión general: captura anormal, no creo que la captura no afectará a otro código que se ejecuta dentro de una transacción, si se trata de una excepción de tiempo de ejecución, unido a la parte trasera de gestión de transacciones, inserciones de bases de datos, las actualizaciones se pondrá en marcha como en otras operaciones.
1, el siguiente código, aunque con una captura intento de captura esa excepción (datos demasiado largo para la columna 'project_id_' en la fila 1), se imprimirá el registro (para capturar la excepción interna), al no ser fuera de la instrucción de actualización, pero todavía no tendremos éxito. Descripción de la operación se deshace.
@Transactional
public void testIsRoback() {
try {
this.executeSql();
// 可以正常执行的sql,测试在executeSql()方法抛运行时异常后还能入库吗
jdbcTemplate.update("INSERT INTO t_finance_zndb_log (id_,project_id_) value ('1','2')");
} catch (Exception e) {
System.out.println("+++++++++++++++++++捕获到外部异常了+++++++++++++++++++++++");
e.printStackTrace();
}
}
private void executeSql() {
try {
// 模拟运行时异常
jdbcTemplate.execute("INSERT INTO t_finance_zndb_log (id_,project_id_) value ('1','222')");
} catch (Exception e) {
System.out.println("------------------捕获到内部异常了-----------------------");
e.printStackTrace();
}
}
2, la situación anormal no es lo mismo si el tiempo no se corre. Aunque se puede ver la excepción interna capturado, pero la instrucción de inserción no se revierte, siendo guardado en la base de datos.