Spring's @Transactional anotasi menawarkan dua parameter penting, pengasingan dan penyebaran, untuk menyesuaikan gelagat transaksi. Mari kita selidiki parameter ini dan terokai implikasinya dalam senario dunia sebenar.
Penyebaran mentakrifkan hubungan antara urus niaga. Pilihan yang paling biasa termasuk:
Lazimnya, DIPERLUKAN menyajikan kebanyakan senario. Walau bagaimanapun, REQUIRES_NEW adalah sesuai apabila memastikan pengasingan lengkap transaksi adalah diutamakan.
Pengasingan memastikan integriti data dengan menyatakan cara transaksi berinteraksi antara satu sama lain. Pilihan utama termasuk:
Kelemahan tahap pengasingan yang lebih ketat (cth., BOLEH DISERI) ialah prestasi yang berkurangan dalam aplikasi berbilang benang. Oleh itu, adalah dinasihatkan untuk mempertimbangkan dengan teliti tukar ganti berdasarkan keperluan aplikasi.
Melindungi daripada Konflik Data dengan Bacaan Kotor:
Contoh klasik bacaan kotor berlaku apabila Thread 1 menulis nilai pada baris pangkalan data dan kemudian melancarkan transaksi, meninggalkan nilai lama dalam pangkalan data. Jika Thread 2 membaca baris secara serentak, ia akan melihat nilai lama (kini tidak betul). Untuk mengelakkan ketidakkonsistenan tersebut, kami boleh menggunakan ISOLATION_READ_COMMITTED.
Menguatkuasakan Pengasingan Transaksi:
Aplikasi praktikal penyebaran REQUIRES_NEW adalah dalam kaedah perkhidmatan yang harus sentiasa dilaksanakan sepenuhnya dalam transaksi terpencil. Pertimbangkan kaedah berikut:
<code class="java">@Transactional(propagation=Propagation.REQUIRES_NEW) public void provideService() { repo1.retrieveFoo(); repo2.retrieveFoo(); }</code>
Kaedah ini memastikan bahawa sebarang perubahan yang dibuat pada repo1 dan repo2 repositori diasingkan daripada urus niaga lain, menghalang kemungkinan gangguan dan mengekalkan ketekalan data.
Atas ialah kandungan terperinci Bagaimanakah Parameter Pengasingan dan Pembiakan dalam Gelagat Transaksi Bentuk @Transactional Spring?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!