Baru -baru ini, saya menemukan situasi di mana transaksi tidak mundur. Saya juga mempertimbangkan mengatakan bahwa ada bug dalam transaksi JPA? Saya terlalu banyak berpikir ...
Untuk mencetak log dengan jelas, saya menambahkan Tyrcatch untuk mencetak log dalam tangkapan. Tapi situasinya di sini datang. Ketika metode ini abnormal, log dicetak, tetapi transaksi yang ditambahkan tidak digulung kembali.
contoh:
Metode seperti ini tidak akan rollback (satu kesalahan metode, metode lain tidak akan rollback):
if (UsersAve) {coba {userdao.save (user); usercapabilityquotadao.save (kemampuanquota); } catch (Exception e) {logger.info ("Kemampuan untuk membuka antarmuka, pengecualian pembukaan akun, informasi pengecualian:"+e); }}Metode berikut bergulir kembali (satu kesalahan metode, metode lain akan berputar kembali):
if (UsersAve) {coba {userdao.save (user); usercapabilityquotadao.save (kemampuanquota); } catch (Exception e) {logger.info ("Kemampuan untuk membuka antarmuka, pengecualian pembukaan akun, informasi pengecualian:"+e); lempar runimeException baru (); }}atau:
if (UsersAve) {coba {userdao.save (user); usercapabilityquotadao.save (kemampuanquota); } catch (Exception e) {logger.info ("Kemampuan untuk membuka antarmuka, pengecualian pembukaan akun, informasi pengecualian:"+e); TransactionAspectSupport.CurrentTransactionStatus (). SetrollbackOnly (); }}Mengapa Anda tidak bisa keluar? ? Itu tidak memahami mekanisme transaksi musim semi. Lai Lai
***** Transaksi pegas default hanya digulung kembali ketika runtimeexcetpion yang tidak dibahas terjadi. *******
Prinsip penangkapan pengecualian Spring: Metode yang dicegat perlu melempar pengecualian secara eksplisit dan tidak dapat diproses dengan cara apa pun. Dengan cara ini, agen AOP dapat menangkap pengecualian metode dan memutar kembali. Secara default, AOP hanya menangkap pengecualian runtimeException, tetapi dapat lewat.
Konfigurasikan untuk menangkap pengecualian tertentu dan memutar kembali
Dengan kata lain, jangan gunakan Trycatch dalam metode layanan atau tambahkan lempar yang dilontarkanimeExCetpion () ke tangkapan, sehingga program dapat ditangkap oleh AOP dan digulung kembali ketika programnya luar biasa.
Larutan:
Solusi 1. Misalnya, jika lapisan layanan menangani transaksi, maka metode dalam layanan tidak melakukan pengecualian, atau menambahkan pernyataan lempar -lemparan lempar ke pernyataan tangkapan, sehingga AOP menangkap pengecualian dan kemudian berguling kembali, dan layanan atas layanan (klien layanan web, tindakan layer) harus terus menangkap dan menangani pengecualian.
Solusi 2. Tambahkan: TransactionAspectSupport.CurrentTransactionStatus (). SetrollbackOnly (); Pernyataan untuk pernyataan tangkapan dari metode lapisan layanan, rollback secara manual, sehingga lapisan atas tidak perlu menangani pengecualian (praktik proyek saat ini)
Meringkaskan
Di atas adalah semua konten artikel ini tentang analisis instance rollback pengecualian transaksi pegas. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!