โดยทั่วไปเรากำหนดค่าการจัดการธุรกรรมสำหรับรหัสเลเยอร์บริการในแอปพลิเคชันไฟล์กำหนดค่าของฤดูใบไม้ผลิ xml เราสามารถเพิ่มประสิทธิภาพของวิธีการบริการหรือการประมวลผลธุรกรรมเช่นการย้อนกลับธุรกรรม อย่างไรก็ตามเมื่อเราพบปัญหาหากมีการเรียกวิธีเลเยอร์บริการในคลาสคอนโทรลเลอร์การจัดการธุรกรรมที่กำหนดค่าจะไม่ถูกต้อง หากเราสอบถามข้อมูลที่เกี่ยวข้องและค้นหาเหตุผล ในความเป็นจริง Spring และ SpringMVC เป็นความสัมพันธ์ระหว่างพ่อแม่และลูกฤดูใบไม้ผลิเป็นภาชนะบรรจุแม่และ SpringMVC เป็นภาชนะบรรจุเด็ก กล่าวอีกนัยหนึ่ง Application.xml ควรรับผิดชอบในการสแกนคำอธิบายประกอบของ @Controller เช่น @Service ในขณะที่ไฟล์การกำหนดค่า SpringMVC ควรรับผิดชอบในการสแกน @Controller มิฉะนั้นจะทำให้การสแกนซ้ำเพื่อทำให้การทำธุรกรรมที่กำหนดค่าในคอนเทนเนอร์ฤดูใบไม้ผลิ
ดังนั้นวิธีการกำหนดค่าที่ถูกต้องควรเป็น:
ไฟล์การกำหนดค่าสปริง: application.xml
<บริบท: Component-Scan base-package = "org.bc.redis" use-default-filters = "true"> <!-ไม่รวมคลาสที่มีคำอธิบายประกอบ @Controller-> <บริบท: exclude-filter type = "Annotation" Expression =
หรือ
<!-ระบุแพ็คเกจที่สแกนหลีกเลี่ยงแพ็คเกจที่มีคำอธิบายประกอบ @Controller-> <บริบท: คอมโพเนนต์-สแกนฐานแพคเกจ = "org.bc.redis.service" ใช้ default-filters = "true"> <บริบท: Component-Scan>
ไฟล์การกำหนดค่า SpringMvc: SpringMvc.xml
<!-สแกนเฉพาะแพ็คเกจที่มีคำอธิบายประกอบ @Controller เพื่อหลีกเลี่ยงการสแกนซ้ำ-> <บริบท: Component-scan base-base-package = "org.bc.redis.controller" ใช้ default-filters = "true"> <บริบท: Component-Scan>
ในที่สุด
หลังจากการทดสอบปัญหาหลักคือไฟล์การกำหนดค่าของ SpringMVC สแกนขอบเขตแพ็คเกจ แม้ว่าไฟล์การกำหนดค่าของสปริงจะสแกนคำอธิบายประกอบ @Controller แต่ก็จะถูกนำไปใช้ใน SpringMVC หนึ่งครั้ง ตราบใดที่บริการการจัดการธุรกรรมไม่ได้ถูกกู้คืนจะไม่มีปัญหาการทำธุรกรรมล้มเหลว
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับเหตุผลและโซลูชันสำหรับการจัดการธุรกรรมที่ไม่ถูกต้องของการกำหนดค่า Spring+SpringMVC ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!