1. Kesimpulan
Manajemen transaksi Spring hanya mengembalikan pengecualian runtime (java.lang.RuntimeException dan subkelasnya) secara default.
Jika suatu metode memunculkan pengecualian Exception atau Checked, manajemen transaksi Spring tidak melakukan rollback secara default.
Pengenalan rinci tentang klasifikasi pengecualian:
1. Konsep dasar <BR>Lihatlah diagram struktur pengecualian java
Throwable adalah akar dari semua pengecualian, java.lang.Throwable
Kesalahan adalah kesalahan, java.lang.Error
Pengecualian adalah pengecualian, java.lang.Exception
2.Pengecualian
Umumnya dibagi menjadi pengecualian Checked dan pengecualian Runtime. Semua instance dari kelas RuntimeException dan subkelasnya disebut pengecualian Runtime, dan pengecualian yang tidak termasuk dalam kategori ini disebut CheckedExceptions.
① Pengecualian yang diperiksa Hanya bahasa Java yang menyediakan pengecualian yang Diperiksa. Java menganggap pengecualian yang Diperiksa sebagai pengecualian yang dapat ditangani, sehingga program Java harus secara eksplisit menangani pengecualian yang Diperiksa. Jika program tidak menangani pengecualian yang Diperiksa, kesalahan akan terjadi saat program dikompilasi dan tidak dapat dikompilasi. Hal ini mencerminkan filosofi desain Java: kode tanpa penanganan kesalahan yang sempurna tidak memiliki peluang untuk dieksekusi. Ada dua cara untuk menangani pengecualian yang diperiksa
(1) Jika metode saat ini mengetahui cara menangani pengecualian, ia menggunakan blok try...catch untuk menangani pengecualian.
(2) Jika metode saat ini tidak mengetahui cara menanganinya, maka nyatakan untuk membuang pengecualian saat mendefinisikan metode tersebut.
Copy kode kodenya sebagai berikut:
paket cn.xy.test;
impor java.io.IOException;
/**
* Memeriksa metode pengujian pengecualian
* @penulis xy
*
*/
kelas publik CheckedExceptionMethods
{
//Kelas eksepsi total mencakup memeriksaException dan RuntimeException, sehingga dicentangException harus diproses
public void method1() memunculkan Pengecualian
{
System.out.println("Saya adalah metode kelas umum yang memberikan pengecualian");
}
//Tangkap dan tangani pengecualian ini
tes kekosongan publikMethod1_01()
{
mencoba
{
metode1();
}
tangkapan (Pengecualian e)
{
e.printStackTrace();
}
}
// Lewati pengecualian
public void testMethod1_02() memunculkan Pengecualian
{
metode1();
}
public void testMethod1_03() memunculkan Pengecualian
{
melempar Pengecualian baru();
}
uji kekosongan publikMetode1_04()
{
mencoba
{
melempar Pengecualian baru();
}
tangkapan (Pengecualian e)
{
e.printStackTrace();
}
}
//checkException biasanya mewakili IOException
public void method2() menampilkan IOException
{
System.out.println("Saya adalah metode yang memunculkan pengecualian IO");
}
kekosongan publik testMethod2_01()
{
mencoba
{
metode2();
}
tangkapan (Pengecualian e)
{
e.printStackTrace();
}
}
public void testMethod2_02() memunculkan Pengecualian
{
metode2();
}
}
Pengecualian yang dicentang yang lebih kita kenal termasuk
Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException
②RuntimeException
Saat runtime, jika pembagi adalah 0 atau subskrip array di luar batas, dll., hal tersebut sering terjadi dan sulit untuk ditangani. Menampilkan deklarasi atau tangkapan akan berdampak besar pada keterbacaan dan efisiensi pengoperasian program. Jadi sistem secara otomatis mendeteksinya dan menyerahkannya ke penangan pengecualian default. Tentu saja, Anda juga dapat menangkapnya secara eksplisit jika Anda memiliki persyaratan pemrosesan.
Copy kode kodenya sebagai berikut:
paket cn.xy.test;
/**
* Metode pengujian pengecualian runtime
* @penulis xy
*
*/
RuntimeExcetionMethods kelas publik
{
public void method3() menampilkan RuntimeException
{
System.out.println("Saya adalah metode yang memunculkan pengecualian runtime");
}
pengujian kekosongan publikMethod3_01()
{
metode3();
}
tes kekosongan publikMethod1_02()
{
lempar RuntimeException();
}
}
Subkelas dari kelas RumtimeException yang lebih kita kenal meliputi
Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException
3.Kesalahan Ketika kesalahan yang tidak dapat dikendalikan terjadi dalam suatu program, pendekatan yang biasa dilakukan adalah memberi tahu pengguna dan menghentikan eksekusi program. Tidak seperti pengecualian, objek Error dan subkelasnya tidak boleh dilempar.
Error adalah subkelas dari throwable yang mewakili waktu kompilasi dan kesalahan sistem dan digunakan untuk menunjukkan masalah serius yang tidak boleh ditangkap oleh aplikasi yang masuk akal.
Kesalahan dihasilkan dan dilempar oleh mesin virtual Java, termasuk kegagalan tautan dinamis, kesalahan mesin virtual, dll. Program tidak memprosesnya.
2. Ubah mode default <BR> Tentukan noRollbackFor dan RollbackFor dalam anotasi @Transaction untuk menentukan apakah akan mengembalikan pengecualian tertentu.
@Transaksi(noRollbackFor=RuntimeException.kelas)
@Transaksi(RollbackFor=Exception.class)
Ini mengubah metode pemrosesan transaksi default.
3. Pencerahan <BR>Ini mengharuskan kita untuk membuat pengecualian khusus yang diwarisi dari RuntimeException ketika kita menyesuaikan pengecualian, sehingga ketika pengecualian tersebut dilempar, itu akan ditangani secara akurat oleh pemrosesan transaksi default Spring.