Lingkungan konstruksi dasar yang diadopsi: SpringMVC, Mybatis, MySQL, Tomcat Spring Transaction Management meruntuhkan kerugian manajemen transaksi global tradisional dan manajemen transaksi lokal, sehingga model manajemen transaksi terpadu dapat digunakan dalam lingkungan apa pun, dan Anda dapat menulis kode sekali sekali Kemudian konfigurasi kebijakan manajemen transaksi yang berbeda dari kode Anda di lingkungan yang berbeda. menggunakan springmvc dan mybatis, itu diberi label seragam untuk menyatakan layanan dan pengontrol
Karena urutan memuat file konfigurasi di server dimulai adalah web.xml --- root-context.xml (file konfigurasi pegas) --- servlet-context.xml (file konfigurasi springmvc), karena root-context Konfigurasi .xml dalam file, pengontrol akan dipindai terlebih dahulu, tetapi pada saat ini, layanan belum ditingkatkan dengan transaksi. kapasitas), jadi kita harus berada di root-context.xml jangan memindai pengontrol, konfigurasinya adalah sebagai berikut:
<!-Memindai secara otomatis komponen, di sini adalah untuk menghapus pengontrol di bawah ini. -> Context: Component-Scan Base-Package = "Com.Sence"> <Context: Excelude-filter type = "annotation" = "org.springframework.sterotype.contror oller" />. > <!-secara otomatis memindai komponen, di sini adalah untuk menghapus controller di bawah ControlR. -> <konteks: komponen-scan-package = "com.sence"> <Context: ExculdUd-filter type = "annotation" = "org.springframework.sterotype.contror oller" /> < /konteks: component-scan "Pengontrol pemindaian di service-ontext.xml saat tidak memindai layanan, konfigurasinya adalah sebagai berikut:
<!-Memindai semua pengontrol tetapi jangan memindai layanan-> <konteks: komponen-pemindaian paket basa = "com.sence"> <konteks: include-filter type = "annotation" = "atau. G.springframework.stereotype .Controller " /> <Context: Exclude-Free Type =" Annotion "Expression =" org.springframework.steeotype.service " /> < /konteks: Component ---! Controller tetapi tidak memindai layanan--> <konteks: Component-Scan Base-Package = "com.sence"> <Context: include-filter type = "annotation" = "org.springframework.stereotype.contro ller" /> <konteks: exclude-filter type = "annotation." = "Org.springframework.sterotype.service" /> < /component-scan>Berikut ini dapat dikonfigurasi untuk pengelolaan pernyataan, konfigurasi adalah sebagai berikut:
<!-Transaction Manager, Gunakan DataSourCetransactionager-> <bean id = "txManager"> <name properti = "DataSource" ref = "DataSource" /> </ bean> <!-sprin. Config> <aop: pointcut id = "fooserviceMethods" exposition = "eksekusi (*com.sence.*.*. Impl.*.*(..))" <aop: advisor nasihat-ref = "txadvice" pointcut-ref = "FooServiceMethods"/> </aop: config> <tx: nasihat id = "txadvice" transaction-manager = "txManager"> <tx: atribut> <metode nam e = "find*" hanya baca = "true" /> <tx: Metode name = "love*" baca-only = "true"/> <tx: metode name = "*" rollback-for = "customexception"/> </tx: atribut> </tx: saran > <!-Transaction Manager, gunakan DataSourCetRansActionager-> <bean id = "txManager"> <name properti = "DataSource" ref = "DataSource"/</> <> bean> <!-Manajemen Transaksi Deklaratif Musim Semi-> <AOP: Config> <aop: pointcut id = "fooservicemethods" ekspresi = "eksekusi (*com.sence.*.*.*.*(..))" AOP: Advisor Advice-Ref = "TXAdvice" pointcut-ref = "fooservicemethods "/> </aop: config> <tx: nasihat id =" txadvice "transaction-manager =" txManager "> <tx: attr ibutes> <tx: metode name =" find*"read-only =" true "/ > <tx: Metode name = "muat*" baca-only = "true"/> <tx: Metode name = "*" rollback-for = "customexception"/> </tx: atribut> </tx: saran>Pada titik ini, konfigurasi saya selesai, tetapi setelah pengujian saya, ketika saya pergi ke tabel database MySQL dalam batch, salah satu objek salah, dan urusan customexception tidak kembali. , langkah -langkahnya adalah sebagai berikut: 1. Temukan apakah Deklarasi Deklarasi -Pena -Transaksi Tipe salah, jika titik masuknya salah