1. Заключение
По умолчанию управление транзакциями Spring отменяет только исключения времени выполнения (java.lang.RuntimeException и его подклассы).
Если метод выдает исключение Exception или Checked, управление транзакциями Spring не выполняет откат по умолчанию.
Подробное введение в классификацию исключений:
1. Основные понятия <BR>Посмотрите на диаграмму структуры исключений Java.
Throwable — это корень всех исключений, java.lang.Throwable.
Ошибка есть ошибка, java.lang.Error
Исключение есть исключение, java.lang.Exception
2.Исключение
Обычно делятся на проверенные исключения и исключения времени выполнения. Все экземпляры класса RuntimeException и его подклассов называются исключениями времени выполнения, а исключения, не попадающие в эту категорию, называются CheckedExceptions.
① Проверяемое исключение Только язык Java предоставляет Проверенные исключения. Java считает Проверенные исключения исключениями, которые можно обработать, поэтому программы Java должны явно обрабатывать Проверенные исключения. Если программа не обрабатывает исключение Checked, при компиляции программы произойдет ошибка, и она не сможет быть скомпилирована. Это отражает философию проектирования Java: код без идеальной обработки ошибок не имеет шансов на выполнение. Существует два способа обработки проверенных исключений.
(1) Если текущий метод знает, как обработать исключение, он использует блок try...catch для обработки исключения.
(2) Если текущий метод не знает, как его обработать, объявите об исключении исключения при определении метода.
Скопируйте код кода следующим образом:
пакет cn.xy.test;
импортировать java.io.IOException;
/**
* Проверен метод тестирования исключений.
* @author ху
*
*/
общедоступный класс CheckedExceptionMethods
{
//Общий класс исключений включает в себя как CheckException, так и RuntimeException, поэтому CheckException должно быть обработано
public void метод1() выдает исключение
{
System.out.println("Я — метод общего класса, который генерирует исключения");
}
//Перехватить и обработать это исключение
общественный недействительный testMethod1_01()
{
пытаться
{
метод1();
}
поймать (Исключение e)
{
е.printStackTrace();
}
}
// Передаем исключение
public void testMethod1_02() выдает исключение
{
метод1();
}
public void testMethod1_03() выдает исключение
{
выбросить новое исключение();
}
общедоступный недействительный testMethod1_04()
{
пытаться
{
выбросить новое исключение();
}
поймать (Исключение e)
{
е.printStackTrace();
}
}
// CheckException обычно представляет собой IOException
public void метод2() выдает IOException
{
System.out.println("Я метод, который выдает исключение ввода-вывода");
}
публичный недействительный testMethod2_01()
{
пытаться
{
метод2();
}
поймать (Исключение e)
{
е.printStackTrace();
}
}
public void testMethod2_02() выдает исключение
{
метод2();
}
}
К проверенным исключениям, с которыми мы более знакомы, относятся
Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException
②Исключение времени выполнения
Во время выполнения, если делитель равен 0 или индекс массива выходит за пределы и т. д., они возникают часто и с ними сложно справиться. Отображение объявлений или захватов будет иметь большое влияние на читаемость и эффективность работы программы. Таким образом, система автоматически обнаруживает их и передает обработчику исключений по умолчанию. Конечно, вы также можете зафиксировать их явно, если у вас есть требования к обработке.
Скопируйте код кода следующим образом:
пакет cn.xy.test;
/**
* Метод тестирования исключений во время выполнения
* @author ху
*
*/
общедоступный класс RuntimeExcetionMethods
{
public void метод3() выдает RuntimeException
{
System.out.println("Я метод, который генерирует исключения во время выполнения");
}
общедоступный недействительный testMethod3_01()
{
метод3();
}
общедоступный недействительный testMethod1_02()
{
выбросить новое RuntimeException();
}
}
Подклассы класса RumtimeException, с которыми мы более знакомы, включают
Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException
3. Ошибка Когда в программе возникает неконтролируемая ошибка, обычным подходом является уведомление пользователя и прекращение выполнения программы. В отличие от исключений, объекты Error и его подклассов не должны создаваться.
Error — это подкласс throwable, который представляет ошибки времени компиляции и системы и используется для обозначения серьезных проблем, которые разумные приложения не должны пытаться обнаружить.
Ошибки генерируются и выдаются виртуальной машиной Java, включая сбои динамического соединения, ошибки виртуальной машины и т. д. Программа его не обрабатывает.
2. Измените режим по умолчанию. <BR> Определите noRollbackFor и RollbackFor в аннотации @Transaction, чтобы указать, следует ли откатывать определенные исключения.
@Transaction(noRollbackFor=RuntimeException.class)
@Transaction(RollbackFor=Exception.class)
Это меняет метод обработки транзакций по умолчанию.
3. Просвещение <BR>Это требует, чтобы пользовательское исключение наследовалось от RuntimeException при настройке исключения, чтобы при его возникновении оно точно обрабатывалось обработкой транзакций Spring по умолчанию.